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.