Tek bir alıntıdan nasıl kaçarım?


188

'JavaScript'te (tek tırnak) nasıl kaçabilirim ?

Burası kullanmaya çalıştığım yer:

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

Yukarıdaki kodun sonucu metin kutusunda "hel" olarak doldurulur. '\' İle değiştirmeye çalıştım, ama bunu alıyorum.

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

Yukarıdaki kodun sonucu metin kutusunda "hel \" olur.

Tek tırnaklardan başarıyla nasıl kaçabilirim?


Merhaba Ravi, bu daha çok html sorusu. Soruyu HTML olarak yeniden etiketledim, ancak sorunuzdaki soruyu değiştirmek isteyebilirsiniz.
Benjamin Manns

Yanıtlar:


358

HTML varlıklarını kullanabilirsiniz:

  • &#39; için '
  • &#34; için "
  • ...

Daha fazla bilgi için HTML'deki Karakter varlığı referanslarına göz atabilirsiniz .


39
Neden gerektiğini bir öznitelik değerleri için çift tırnak kullanılır?
Gumbo

5
@Pascal MARTIN: XML, özellik değerleri için tek tırnaklara da izin verir. (Bkz. W3.org/TR/xml/#NT-AttValue )
Gumbo

4
@ Gumbo: wooo! Şimdiye kadar tek tırnak tırnak öznitelikleri değerleri kullanan herhangi bir XML belgesi gördüm sanmıyorum; bu yüzden bunun aslında geçerli olduğunu düşünmedim ;; Ben sadece (yine) bir soruyu cevaplarken bir şey öğrendim; bu yorumlar için teşekkürler!
Pascal MARTIN

5
Bunun eski olduğunu biliyorum, ama bence bir HTML varlığı var ":&quot;
daiscog

1
@Pascal, w3c doğrulayıcı, tek tırnakların öznitelikler için geçerli olduğunu gösterir. Bkz. Stackoverflow.com/questions/2210430/…
ChrisJJ

62

Sen kullanabilirsiniz &apos;(IE şüpheli olan) veya &#39;(her yerde çalışır olmalıdır). Kapsamlı bir liste için W3C HTML5 Adlandırılmış Karakter Referansları'na veya WebPlatform.org'daki HTML varlıkları tablosuna bakın .


Vay, bunu yazdığımdan beri bir süre oldu. Yakaladığınız için teşekkürler - W3C ve WebPlatform.org'daki iki tabloya olan bağlantıları güncelledim.
Benjamin Manns

Bunlar, VXML <var> VXML <var> öğesinde bir String değişken değeri, özellik tanımlarının normal çift tırnak işaretleri arasında tek tırnak olarak gösterildiğinden, daha fazla kaçmanın gerekli olduğu VXML <var> İfade öznitelikleri hariç "her yerde" çalışır: <var name = "myvar" expr = "'hel \ & apos; lo'" />
Steve Cohen

9

HTML bağlamında olduğunuz için, bu karakteri temsil etmek için HTML kullanmanız gerekir. Ve HTML için sayısal bir karakter referansı &#39; ( &#x27;onaltılık) kullanmanız gerekir :

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

ama ne demek istediğini anlamadım context of html?
coding_idiot

@coding_idiot HTML ayrıştırıcısının ayrıştırma işlemi sırasında karşılaşabileceği farklı jetonlara göz atın . Her durum, girdiye göre tetiklenen farklı bir ayrıştırma kuralları kümesine sahiptir. Her durum karakter referanslarına izin vermez. Şimdi bakarsak özellik değeri (tek tırnaklı) , bir görebilirsiniz &bir karakter referans başlar gösterir.
Gumbo

7

Bir metin varlığı olarak gösterin (ASCII 39):

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

6

Muhtemelen en kolay yol:

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


-1

kaçış ve unescape javascript inbuild fonksiyonları kullanın

Örneğin

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

Öznitelikte kullanılacak büyük json stringify verileriniz varsa bu yardımcı olacaktır


escapeunicode güvenli değildir. Spesifikasyon, kullanımına karşı tavsiyede bulunur.
Quentin
Sitemizi kullandığınızda şunları okuyup anladığınızı kabul etmiş olursunuz: Çerez Politikası ve Gizlilik Politikası.
Licensed under cc by-sa 3.0 with attribution required.