Я хочу, чтобы отобразить текст в HTML с помощью функции JavaScript. Как я могу избежать специальных символов html в JS? Есть ли API?
javascript
html
fernando123
источник
источник
Ответы:
источник
replace()
вызовах не нужны. Обычные старые односимвольные строки тоже подойдут.источник
Вы можете использовать
.text()
функцию jQuery .Например:
http://jsfiddle.net/9H6Ch/
Из документации jQuery относительно
.text()
функции:Предыдущие версии документации jQuery сформулировали это следующим образом ( выделение добавлено ):
источник
const str = "foo<>'\"&";
$('<div>').text(str).html()
yieldsfoo<>'"&
Я думаю, что нашел правильный способ сделать это ...
источник
document.createTextNode("<script>alert('Attack!')</script>").textContent
Используя lodash
исходный код
источник
Это, безусловно, самый быстрый способ, которым я видел это. Плюс, все это делается без добавления, удаления или изменения элементов на странице.
источник
var divCode = '<div data-title="' + escapeHTML('Jerry "Bull" Winston') + '">Div content</div>'
приведет к неверному HTML!Интересно было найти лучшее решение:
Я не анализирую,
>
потому что это не нарушает XML / HTML-код в результате.Вот тесты: http://jsperf.com/regexpairs Также я создал универсальную
escape
функцию: http://jsperf.com/regexpairs2источник
Самый краткий и эффективный способ отображения незакодированного текста - это использование
textContent
свойства.Быстрее, чем используя
innerHTML
. И это без учета возможности избежать накладных расходов.источник
</
будет достигнута завершающая последовательность .DOM Elements поддерживает преобразование текста в HTML, присваивая innerText . innerText не является функцией, но присвоение ей работает так, как если бы текст был экранирован.
источник
<br>
элементы вместо новых строк, которые могут нарушать определенные элементы, такие как стили или сценарии.createTextNode
Не склонен к этой проблеме.innerText
имеет некоторые проблемы наследства / спецификации. Лучше использоватьtextContent
.Вы можете закодировать каждый символ в вашей строке:
Или просто нацеливайтесь на главных героев, о которых нужно беспокоиться (&, inebreaks, <,>, "и '), например:
источник
Однострочник (для ES6 +):
Для более старых версий:
источник
Наткнулся на эту проблему при построении структуры DOM. Этот вопрос помог мне решить его. Я хотел использовать двойной шеврон в качестве разделителя пути, но добавление нового текстового узла напрямую привело к отображению кода экранированного символа, а не самого символа:
источник
Если вы уже используете модули в своем приложении, вы можете использовать escape-html module.
источник
Попробуйте это, используя
prototype.js
библиотеку:Попробуйте демо
источник
Я придумал это решение.
Давайте предположим, что мы хотим добавить html к элементу с небезопасными данными от пользователя или базы данных.
Это небезопасно против атак XSS. Теперь добавьте это.
Так что, это
Для меня это намного проще, чем использовать,
.replace()
и это удалит !!! все возможные теги HTML (я надеюсь).источник
<script>
в<script>
.