HTML'de varlık olarak işlenmeleri için XML'deki ve işaretlerinden nasıl kaçarım?


523

HTML sayfasında işlemek istediğim bazı XML metinlerim var. Bu yazı onun varlık temsilinde işlemek isteyen bir işareti içerir: &.

Bu ve işareti kaynak XML'de nasıl kaçabilirim? Denedim &, ancak bu HTML'de geçersiz gerçek ve işareti karakteri ( &) olarak çözülür .

Bu yüzden &XML çıktısını kullanan web sayfasında olduğu gibi işlenecek şekilde kaçmak istiyorum .


1
Bu sorunun en son revizyonunda "gerçek ve işareti karakteri (&) ... HTML'de geçersiz" iddiası . yanlış. Gerçekten de, gerekçelendirme olarak sağlanan bağlantılı soruya kabul edilen cevap bile "HTML5, soruyu kaçışsız bırakmanıza izin verir, ancak yalnızca aşağıdaki veriler geçerli bir karakter referansı gibi görünmüyorsa" .
Mark Amery

Yanıtlar:


422

XML'iniz içerdiğinde &bu metinle sonuçlanır &.

Bunu HTML'de kullandığınızda, bu olarak oluşturulur &.


195

Gereğince XML 1.0 spec §2.4 , kullanmak gerekir &.

Denedim & amp; ama buna izin verilmiyor.

Farklı bir sorun olmadığından emin misiniz? XML bunu açıkça ve işaretlerinden kaçmanın yolu olarak tanımlar.


3
Bu, yayınlandığında mükemmel bir şekilde mantıklıydı, ancak sorudaki değişiklikler (veya belki de açıklamalar), çünkü bir cevap olarak saçma görünmesini sağladı. Bir kere, alıntılanan pasaj artık soruda mevcut değildir.
Mark Amery

132

&Çözümünü ve eşdeğer Unicode ondalık uç uca ekleyerek böylece karakter kendisi XML bir kaçış karakteridir &dolayısıyla hataları ayrıştırma hiçbir XML oluşmasının önüne geçilmiş. Yani, karakteri &ile değiştirin &.


5
Bu çözümü gerçekten tercih ediyorum! Onaltılık gösterimi kullanmak da mümkün olmalıdır:&
CodeManX

2
Mantıken, bu neden işe yarar? Her iki dizenin sonunda bir karakter kodu içeren bir ve işareti vardır ...
sijpkes

4
@sijpkes Çünkü buradaki ve işareti ayrıştırıcıya aşağıdaki karakterlerin başka bir karakteri temsil etmek için kullanıldığını söyler, bu durumda bu ve işareti olur. Ve işareti XML'de "yasadışı" değildir - sadece özel bir anlamı vardır. Bunun anlamı "bundan sonra noktalı virgül alana kadar tüm karakterler başka bir şeye çevrilmelidir". Normalde bir ve işareti varsa, açıklayıcı karakterler ve noktalı virgül olmadan ayrıştırıcı karıştırılır.
Riley Major

1
Benim için cevap bu. Ekleme & # 038; Yanıt Başlığımın Konumunda düzeltildi ve Yanıt Başlığında Ampersand gösterilmiyor. : D
iamjoshua

Yığın Taşması çok harika. Sorunumu çözen neredeyse 11 yaşında bir yazı. Ve 690.000 kez görüntülendi.
Bill

69

CDATAEtiketleri kullan :

 <![CDATA[
   This is some text with ampersands & other funny characters. >>
 ]]>

4
Bu bir cevaptan ziyade bir tahmindir.
Bryan Oakley

10
Bir tahmin olabilir; gerçi doğru. CDATA işaretleri ham ve işaretlerinin kullanılmasına izin verir.
Quentin

19
Orijinal yazı, & karakterinin nerede kullanılacağı konusunda hiçbir zaman netlik getirmedi; CDATA etiketleri, yalnızca etiketlerin gerçek içeriği için özellik değerleri için kullanılamaz, bu nedenle '?'
scragar

1
Bu, xml verilerini karakterize etmek için de harikadır ve bu cevap, xml oluşturma ile ilgili diğer birçok senaryoda yardımcı olur. Benim için, Camel XML DSL'de gerçekten yardımcı oldu, gövdeyi veya bazı başlıkları bazı XML verileriyle ayarlamam gerektiğinde, Camel XML ayrıştırıcısı CDATA içeriğini yok saydı ve onları bir karakter akışı olarak okudu. Bu olmadan deve motoru geçersiz xml yapısı istisnaları atıyor
Kimutai

1
Tam olarak ihtiyacım olan cevap bu, çünkü benim durumumda XML'de hangi karakterlerin gelebileceğinden emin değilim, bu yüzden bu bölümdeki her şeyden kaçmam gerekiyor.
Matt


11

Benim durumumda bunu değiştirmek zorunda kaldım %26.

&Bir URL'den kaçmam gerekiyordu . Bu yüzden &amp;benim için çalışmadı. Urlencode işlevi değiştirir &için %26. Bu şekilde ne XML ne de tarayıcı URL mekanizması URL'den şikayet etmedi.


8
Evet. OP'nin XML'den kaçmakla ilgili olduğunu unutmayın. Bir URL'den kaçmak farklı bir konudur. Gerçek eğlence, XML'de URL'ler veya URL'lerde XML parçaları olduğunda başlar ...
Oskar Berggren

6

Ben denedim & amp, ama işe yaramadı. Wim ten Brink'in cevabına dayanarak denedim ve işe yaradı.

Geliştiricilerimden biri beni kullanmamı önerdi & # x26; ve bu, kaç kez oluşturulabileceğinden bağımsız olarak işe yaradı.


5

&amp; XML belgesinin çoğu bölümünde bir ve işareti temsil etmenin yoludur.

XML, HTML içinde görüntülenecek sahip olmak istiyorsanız, önce düzgün kodlanmış XML oluşturmak (değiştirilmesine dayanır hangi gerekir &için &amp;) ve ardından (yine değiştirilmesine dayanır düzgün kodlanmış HTML oluşturmak için kullanabilirsiniz &için &amp;). Sonuç:

&amp;amp;

XML kodlamasının daha ayrıntılı bir açıklaması için bkz:

XML belgelerinde kaçmak için hangi karakterlere ihtiyacım var?


4

<xsl:text disable-output-escaping="yes">&amp;&nbsp;</xsl:text> hile yapacak.


3

Unicode kullanmaya ne dersiniz \u0026? Benim android XML dosyalarımda çalışır. Sorunlar ortaya çıkarsa birisi bana haber verir.


1
\ukaçışların genel olarak XML'de özel bir anlamı yoktur. -1.
Mark Amery

@MarkAmery Evet, özel bir anlamı yok, bu yüzden bu kadar iyi çalışıyorlar - yorumlanacak bir şey yok, bu yüzden yanlış gidecek bir şey yok. Java unicode'u yorumlar ve OP'nin istediği gibi bir ve işareti görüntüler.
Scott Biggs

1
@ScottBiggs Java'nın OP'nin sorusuyla ne ilgisi var?
Philippe-André Lorin

1
@ScottBiggs Yani konu dışı. - 1.
Philippe-André Lorin

1
@ScottBiggs Sizin için çalıştığı ve bazılarının fayda sağlayabileceği gerçeği önemsizdir; cevabınız diğer tüm okuyucuların gürültüsüdür. Çünkü OP'nin sorduğu daha genel durumla ilgilenmiyor. Bu, başarınızı paylaşmamakla ilgili değildir. Bu, ait olduğu yerde tutmakla ilgilidir. Katkınız faydalı olabilir, ancak burada bir yanıt olarak sunulmamış olabilir. Belki bir yorum olarak, belki başka bir soruya bir cevap olarak (kendiniz oluşturmak ve cevaplamakta özgürsünüz).
Philippe-André Lorin

0

XML'nizin aşağıdaki gibi olup olmadığını düşünün.

<Employees Id="1" Name="ABC">
  <Query>
    SELECT * FROM EMP WHERE ID=1 AND RES<>'GCF'
  <Query>
</Employees>

<>Doğrudan hata verdiği için kullanamazsınız . Bu durumda, &#60;&#62;bunun yerine kullanabilirsiniz .

<Employees Id="1" Name="ABC">
  <Query>
    SELECT * FROM EMP WHERE ID=1 AND RES &#60;&#62; 'GCF'
  <Query>
</Employees>

Tüm kodları görmek için buraya tıklayın .


2
Bu cevabın gönderilmesinden önceki 7 yıl içinde bu zeminin iyi kapsandığını düşünüyorum.
miken32
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.