Я вывожу значения из базы данных (она на самом деле не открыта для публичного доступа, но она открыта для входа пользователем в компании - то есть я не беспокоюсь о XSS ).
Я пытаюсь вывести тег, как это:
<a href="" onclick="DoEdit('DESCRIPTION');">Click Me</a>
DESCRIPTION - это значение из базы данных, которое выглядит примерно так:
Prelim Assess "Mini" Report
Я пытался заменить «на \», но независимо от того, что я пытаюсь, Firefox продолжает обрезать мой вызов JavaScript после пробела после слова « Оценивать» , и это вызывает всевозможные проблемы.
Я, должно быть, отказываюсь от очевидного ответа, но за свою жизнь я не могу понять это.
Кто-нибудь хочет указать на мой идиотизм?
Вот вся HTML-страница (в конечном итоге это будет страница ASP.NET , но для ее решения я вынул все остальное, кроме кода проблемы)
<html>
<body>
<a href="#" onclick="DoEdit('Preliminary Assessment \"Mini\"'); return false;">edit</a>
</body>
</html>
javascript
quotes
escaping
Мэтт Доуди
источник
источник
onclick
вложение вашего мероприятия ненавязчивым и перенести всю информацию из вашей базы данных на остров данных. Все будет чище, и вы на самом деле получите какую-то синтаксическую ошибку, если ваши строки экранированы неправильно.Ответы:
Вам нужно экранировать строку, в которую вы пишете,
DoEdit
чтобы вычеркнуть символы двойной кавычки. Они приводятonclick
к преждевременному закрытию атрибута HTML.Использование escape-символа JavaScript,
\
недостаточно в контексте HTML. Вам нужно заменить двойные кавычки на правильное представление сущности XML"
.источник
'mystring'.replace(/"/g, '"');
"
будет работать в этом конкретном случае, как предлагалось до меня, из-за контекста HTML.Однако, если вы хотите, чтобы ваш код JavaScript был независимо экранирован для любого контекста, вы можете выбрать нативную кодировку JavaScript:
'
становится\x27
"
становится\x22
Так что ваш клик станет:
DoEdit('Preliminary Assessment \x22Mini\x22');
Это будет работать, например, также при передаче строки JavaScript в качестве параметра другому методу JavaScript (
alert()
это простой метод тестирования для этого).Я имею в виду повторяющийся вопрос переполнения стека: как мне избежать строки внутри кода JavaScript внутри обработчика onClick?,
источник
"
, конечно, будет работать."
требуется во входных значениях, т.<input value="\x22quoted string\x22">
Е. Не будет работать.onclick="..."
). Значениеvalue
атрибута не обрабатывается в контексте JavaScript, а только в контексте HTML.'mystring'.replace(/"/g, '\\x22').replace(/'/g, '\\x27')
Должен сделать свое дело.
источник
Ребята,
unescape
в JavaScript уже есть функция, которая делает эскапинг для\"
:источник
Проблема в том, что HTML не распознает escape-символ. Вы можете обойти это, используя одинарные кавычки для атрибута HTML и двойные кавычки для щелчка.
источник
Вот как я это делаю, в основном
str.replace(/[\""]/g, '\\"')
.источник
Если вы собираете HTML-код в Java, вы можете использовать этот полезный служебный класс из Apache commons-lang, чтобы сделать все экранирование правильно:
источник
Я сделал образец с использованием JQuery
И это работает в Internet Explorer и Firefox.
источник
Вы можете скопировать эти две функции (перечислены ниже) и использовать их для экранирования / удаления всех кавычек и специальных символов. Вам не нужно использовать jQuery или любую другую библиотеку для этого.
источник
В приведенном ниже коде вы можете найти одинарные кавычки как часть введенной строки с помощью регулярного выражения. Он проверяет, является ли введенная пользователем строка разделенной запятыми, и в то же время даже экранирует любые одиночные кавычки, введенные как часть строки.
Чтобы избежать одинарных кавычек, просто введите обратную косую черту, а затем одиночную кавычку, например: \ ', как часть строки. Я использовал валидатор jQuery для этого примера, и вы можете использовать его для вашего удобства.
Допустимые примеры строк:
'Привет'
'Привет мир'
'Привет мир'
'Привет мир',' '
«Это мой мир», «Не могу наслаждаться этим без меня», «Добро пожаловать, Гость»
HTML:
JavaScript:
источник
Избегайте пробелов, а также. Мне кажется, что Firefox предполагает три аргумента вместо одного.
это неразрывный пробел Даже если это не вся проблема, это все равно может быть хорошей идеей.источник
Вы должны избегать кавычек с двойной обратной косой чертой.
Это терпит неудачу (произведено json_encode PHP ):
Это работает:
источник
Вы можете использовать методы jQuery escape () и unescape (). Как ниже,
Используйте
escape(str);
для выхода из строки и восстановления снова, используяunescape(str_esc);
.источник