Como escapar de uma única citação?

188

Como posso escapar de uma '(aspas simples) em JavaScript?

É aqui que estou tentando usá-lo:

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

O resultado para o código acima é "hel" preenchido na caixa de texto. Eu tentei substituir 'por', mas é isso que estou recebendo.

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

O resultado para o código acima é "hel \" preenchido na caixa de texto.

Como escapar com êxito das aspas simples?

Ravi
fonte
Ei Ravi, isso é mais uma pergunta html. Marquei novamente a questão como HTML, mas você pode alterar isso na sua pergunta.
Benjamin Manns

Respostas:

357

Você pode usar entidades HTML:

  • &#39; para '
  • &#34; para "
  • ...

Para mais, você pode dar uma olhada nas referências de entidade Caractere em HTML .

Pascal MARTIN
fonte
39
Por que alguém deve usar aspas duplas para valores de atributo?
Gumbo
5
@ Pascal MARTIN: XML também permite aspas simples para valores de atributos. (Consulte w3.org/TR/xml/#NT-AttValue )
Gumbo
4
@Gumbo: wooo! Acho que nunca vi nenhum documento XML que estivesse usando valores de atributos de aspas simples; então não achei que isso fosse realmente válido ;; Eu apenas (mais uma vez) aprendi alguma coisa enquanto respondia a uma pergunta; então, obrigado por esses comentários!
Pascal MARTIN
5
Eu sei que isso é antigo, mas acho que vale a pena notar que existe uma entidade HTML para ":&quot;
daiscog
1
@ Pascal, o validador w3c mostra aspas simples são válidas para atributos. E veja stackoverflow.com/questions/2210430/…
ChrisJJ
62

Você pode usar &apos;(que é duvidoso no IE) ou &#39;(que deve funcionar em qualquer lugar). Para obter uma lista abrangente, consulte as Referências de caracteres nomeados em HTML5 do W3C ou a tabela de entidades HTML em WebPlatform.org .

Benjamin Manns
fonte
Uau, já faz um tempo desde que escrevi isso. Obrigado por recebê-lo - atualizei os links para duas tabelas no W3C e no WebPlatform.org.
Benjamin Manns 28/03
Eles funcionam "em qualquer lugar", exceto nos atributos VXML <var> Expression, onde é necessário um escape adicional, pois no VXML <var> um valor de variável String é indicado como aspas simples nas aspas duplas normais das definições de atributo: <var name = "myvar" expr = "'hel \' lo '" />
Steve Cohen
9

Como você está no contexto do HTML, precisa usar o HTML para representar esse caractere. E para HTML, você precisa usar uma referência numérica de caracteres &#39; ( &#x27;hexadecimal):

<input type='text' id='abc' value='hel&#39;lo'>
quiabo
fonte
mas eu não entendi o que você quer dizer com isso context of html?
Coding_idiot 6/11/14
@coding_idiot Veja os diferentes tokens que um analisador de HTML pode encontrar durante o processo de análise . Cada estado possui um conjunto diferente de regras de análise que são acionadas com base na entrada. Nem todo estado permite referências de caracteres. Agora, se você observar o valor do atributo (aspas simples) , poderá ver que a &denota o início de uma referência de caractere.
Gumbo
7

Representa-o como uma entidade de texto (ASCII 39):

<input type='text' id='abc' value='hel&#39;lo'>
AndiDog
fonte
6

Provavelmente a maneira mais fácil:

<input type='text' id='abc' value="hel'lo">
road242
fonte
-1

Você pode tentar usar: &#145;

o perdido
fonte
-1

use funções inbuild javascript escape e unescape

por exemplo

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'"

Isso será útil se você tiver enormes dados json stringify a serem usados ​​no atributo

Ram Bharlia
fonte
escapenão é seguro para Unicode. A especificação desaconselha seu uso.
Quentin