Jak mogę uniknąć pojedynczej wyceny?


188

Jak mogę uciec przed '(pojedynczy cytat) w JavaScript?

Oto, gdzie próbuję go użyć:

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

Wynikiem powyższego kodu jest „hel” wypełnione w polu tekstowym. Próbowałem zamienić „na \”, ale to, co otrzymuję.

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

Wynikiem powyższego kodu jest „hel \” wypełnione w polu tekstowym.

Jak mogę skutecznie uniknąć pojedynczych cytatów?


Cześć Ravi, to jest raczej pytanie HTML. Znaczyłem to pytanie jako HTML, ale możesz to zmienić w swoim pytaniu.
Benjamin Manns,

Odpowiedzi:


358

Możesz użyć encji HTML:

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

Więcej informacji można znaleźć w odwołaniach do encji znakowych w kodzie HTML .


39
Dlaczego warto stosować podwójne cudzysłowy dla wartości atrybutów?
Gumbo,

5
@Pascal MARTIN: XML dopuszcza również pojedyncze cudzysłowy dla wartości atrybutów. (Zobacz w3.org/TR/xml/#NT-AttValue )
Gumbo,

4
@Gumbo: wooo! Nie sądzę, żebym kiedykolwiek widział dokument XML, który używałby pojedynczych cudzysłowów wartości atrybutów arround; więc nie sądziłem, że to było faktycznie ważne ;; Właśnie (jeszcze raz) nauczyłem się czegoś, odpowiadając na pytanie; dzięki za komentarze!
Pascal MARTIN,

5
Wiem, że to stare, ale myślę, że warto zauważyć, że istnieje encja HTML dla ":&quot;
daiscog

1
@Pascal, walidator w3c pokazuje, że pojedyncze cudzysłowy są poprawne dla atrybutów. I patrz stackoverflow.com/questions/2210430/…
ChrisJJ

62

Możesz użyć &apos;(który jest iffy w IE) lub &#39;(który powinien działać wszędzie). Pełna lista znajduje się w W3C HTML5 Named Character References lub w tabeli encji HTML na WebPlatform.org .


Wow, minęło trochę czasu, odkąd to napisałem. Dzięki za złapanie go - zaktualizowałem linki do dwóch tabel na W3C i WebPlatform.org.
Benjamin Manns

Działają one „wszędzie”, z wyjątkiem atrybutów wyrażenia VXML <var>, w których konieczne jest dalsze znaki specjalne, ponieważ w VXML <var> wartość zmiennej String jest podawana jako pojedyncze cudzysłowy w normalnych podwójnych cudzysłowach definicji atrybutów: <var name = "myvar" expr = "'hel \' ap '; lo'" />
Steve Cohen

9

Ponieważ jesteś w kontekście HTML, musisz użyć HTML do reprezentowania tego znaku. W przypadku HTML należy użyć odwołania do znaku numerycznego &#39; ( &#x27;szesnastkowego):

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

ale nie rozumiem, co masz na myśli context of html?
coding_idiot

@coding_idiot Spójrz na różne tokeny, które parser HTML może napotkać podczas analizy . Każdy stan ma inny zestaw reguł analizowania, które są uruchamiane na podstawie danych wejściowych. Nie każdy stan dopuszcza odwołania do znaków. Teraz, gdy spojrzysz na wartość atrybutu (pojedynczy cudzysłów) , zobaczysz, że a &oznacza początek odwołania do znaku.
Gumbo,

7

Przedstaw go jako jednostkę tekstową (ASCII 39):

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

6

Prawdopodobnie najłatwiejszy sposób:

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


-1

użyj funkcji wbudowanych javascript, escape i unescape

na przykład

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

Będzie to pomocne, jeśli masz ogromne dane strunowe typu json do wykorzystania w tym atrybucie


escapenie jest bezpieczny dla Unicode. Specyfikacja odradza jej stosowanie.
Quentin
Korzystając z naszej strony potwierdzasz, że przeczytałeś(-aś) i rozumiesz nasze zasady używania plików cookie i zasady ochrony prywatności.
Licensed under cc by-sa 3.0 with attribution required.