Как мне избежать одной цитаты?

188

Как я могу избежать '(одинарная кавычка) в JavaScript?

Вот где я пытаюсь это использовать:

<input type='text' id='abc' value='hel'lo'>

Результат для приведенного выше кода "hel" заполняется в текстовом поле. Я пытался заменить 'на \', но это то, что я получаю.

<input type='text' id='abc' value='hel\'lo'>

Результат для приведенного выше кода "hel \" заполняется в текстовом поле.

Как я могу успешно избежать одиночных кавычек?

Ravi
источник
Привет Рави, это больше вопрос HTML. Я пометил вопрос как HTML, но вы можете изменить это в своем вопросе.
Бенджамин Маннс

Ответы:

358

Вы можете использовать HTML-сущности:

  • &#39; для '
  • &#34; для "
  • ...

Более подробно вы можете взглянуть на ссылки на объекты Character в HTML .

Паскаль МАРТИН
источник
39
Почему следует использовать двойные кавычки для значений атрибутов?
Гамбо
5
@Pascal MARTIN: XML также допускает одинарные кавычки для значений атрибутов. (См w3.org/TR/xml/#NT-AttValue )
Гамбо
4
@ Гамбо: уууу! Я не думаю, что когда-либо видел документ XML, в котором использовались бы значения атрибутов arround в одинарных кавычках; так что я не думаю, что это на самом деле действительно ;; Я просто (еще раз) кое-что узнал, отвечая на вопрос; Итак, спасибо за эти комментарии!
Паскаль МАРТИН
5
Я знаю, что это старый, но я думаю, что стоит отметить, что существует HTML-сущность для ":&quot;
daiscog
1
@Pascal, w3c validator показывает, что одинарные кавычки действительны для атрибутов. И смотрите stackoverflow.com/questions/2210430/…
ChrisJJ
62

Вы можете использовать &apos;(что ненадежно в IE) или &#39;(которое должно работать везде). Полный список см. В разделе Ссылки именованных символов W3C HTML5 или в таблицу сущностей HTML на WebPlatform.org .

Бенджамин Маннс
источник
Вау, это было некоторое время, так как я написал это. Спасибо за это - я обновил ссылки на две таблицы на W3C и WebPlatform.org.
Бенджамин Маннс
Они работают «везде», за исключением атрибутов VXML <var> Expression, где требуется дальнейшее экранирование, поскольку в VXML <var> значение переменной String указывается в виде одинарных кавычек в обычных двойных кавычках определений атрибутов: <var name = "myvar" expr = "'hel \ & apos; lo'" />
Стив Коэн
9

Поскольку вы находитесь в контексте HTML, вам нужно использовать HTML для представления этого символа. А для HTML вам нужно использовать числовую символьную ссылку &#39; ( &#x27;шестнадцатеричное):

<input type='text' id='abc' value='hel&#39;lo'>
гумбо
источник
но я не понял, что вы имеете в виду context of html?
coding_idiot
@coding_idiot Посмотрите на различные токены, с которыми HTML-парсер может столкнуться в процессе анализа . Каждое состояние имеет различный набор правил синтаксического анализа, которые запускаются на основе входных данных. Не каждое государство допускает ссылки на символы. Теперь, если вы посмотрите на значение атрибута (в одинарных кавычках) , вы увидите, что a &обозначает начало ссылки на символ.
Гамбо
7

Представьте его как текстовую сущность (ASCII 39):

<input type='text' id='abc' value='hel&#39;lo'>
AndiDog
источник
6

Наверное, самый простой способ:

<input type='text' id='abc' value="hel'lo">
road242
источник
-1

Вы можете попробовать использовать: &#145;

потерянный
источник
-1

использовать встроенные функции javascript escape и unescape

например

var escapedData = escape("hel'lo");   
output = "%27hel%27lo%27" which can be used in the attribute.

again to read the value from the attr

var unescapedData = unescape("%27hel%27lo%27")
output = "'hel'lo'"

Это будет полезно, если у вас есть огромные данные json stringify для использования в атрибуте

Рам Бхарлия
источник
escapeне является безопасным Unicode. Спецификация рекомендует против его использования.
Квентин