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?


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 .


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 .


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

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

6

Provavelmente a maneira mais fácil:

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


-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


escapenão é seguro para Unicode. A especificação desaconselha seu uso.
Quentin
Ao utilizar nosso site, você reconhece que leu e compreendeu nossa Política de Cookies e nossa Política de Privacidade.
Licensed under cc by-sa 3.0 with attribution required.