У меня есть выпадающий на веб-странице, которая ломается, когда строка значения содержит цитату.
Значение "asd
, но в DOM оно всегда отображается в виде пустой строки.
Я старался изо всех сил, как я знаю, избежать этой строки, но безрезультатно.
<option value=""asd">test</option>
<option value="\"asd">test</option>
<option value=""asd">test</option>
<option value=""asd">test</option>
Как мне сделать это на странице, чтобы сообщение обратной передачи содержало правильное значение?
htmlentities
.Ответы:
"
это правильный путь, третий из ваших тестов:Вы можете увидеть это работает ниже, или на jsFiddle .
Кроме того, вы можете разделить значение атрибута одинарными кавычками:
источник
"
сопоставляется с тем же символом, что и здесь"
, но здесь нет преимущества использования числовой опции, потому что"
это определенная именованная сущность."
также легче запомнить.&quot;a
(заменить&
с&
)Если вы используете PHP, попробуйте вызвать
htmlentities
или использоватьhtmlspecialchars
функцию.источник
<option value='<?php echo htmlentities("' onmouseover='alert(123);' foo='"); ?>' />
- убедитесь, что вы используете его с ENT_QUOTES, это безопасно:<option value='<?php echo htmlentities("' onmouseover='alert(123);' foo='", ENT_QUOTES); ?>' />
но в дополнение к ENT_QUOTES вы должны также добавить ENT_SUBSTITUTE и ENT_DISALLOWED, лично я использовал эту оболочку годами:function hhb_tohtml(string $str):string { return htmlentities($str, ENT_QUOTES | ENT_HTML401 | ENT_SUBSTITUTE | ENT_DISALLOWED, 'UTF-8', true); }
В соответствии с синтаксисом HTML и даже HTML5 , все следующие допустимые параметры:
Обратите внимание, что если вы используете синтаксис XML, кавычки (одинарные или двойные) обязательны.
Вот jsfiddle, показывающий все вышеперечисленное .
источник
Другим вариантом является замена двойных кавычек одинарными, если вы не против того, что это такое. Но я не упоминаю этот:
Я упоминаю это:
В моем случае я использовал это решение.
источник
Если вы используете Javascript и Lodash, то вы можете использовать _.escape (), который экранирует ", ', <,> и &.
Смотрите здесь: https://lodash.com/docs/#escape
источник
Вы действительно должны разрешить только ненадежные данные в белый список хороших атрибутов, таких как: align, alink, alt, bgcolor, border, cellpadding, cellspacing, класс, цвет, cols, colspan, координаты, dir, face, height, hspace, ismap, lang marginheight, marginwidth, несколько, nohref, noresize, noshade, nowrap, ref, rel, rev, rows, rowspan, прокрутка, форма, диапазон, сводка, tabindex, title, usemap, valign, значение, vlink, vspace, width
Вы действительно хотите уберечь ненадежные данные от обработчиков javascript, а также от атрибутов id или name (они могут заглушить другие элементы в DOM).
Кроме того, если вы помещаете ненадежные данные в атрибут SRC или HREF, то это действительно ненадежный URL, поэтому вам нужно проверить URL, убедиться, что он НЕ является javascript: URL, а затем кодировать сущность HTML.
Подробнее обо всем этом здесь: https://www.owasp.org/index.php/Abridged_XSS_Prevention_Cheat_Sheet
источник
Нет способа избежать кавычек в значении входного текста ... но вы можете использовать javascript (или jquery):
источник