2011-06-16 14 views
6

yılında xml yazarken dize kaldır & amp. Bunu denediğimde, bağlantı, xml'de & olur. Yani product=1&qty;=1, product=1&qty;=1 olur. Ben DOMDocument & işareti içeren bir bağlantı kullanarak bir XML dosyasına yazmaya çalışıyorum PHP

Bana Bunu önlemek için bir yol söyleyebilir misiniz?

+0

- XML ​​aracı teşekkür ederim. &qty; 'geçersiz XML. XML aracınıza biraz daha teşekkür edin. "Doğru şekilde göster" (yalnızca bir & & quot;) olarak görmek için XML-farkında bir editör kullanın; yani not defteri değil. Doğal olarak URI *, sadece XML ile ilgisi yoktur. –

+0

Neden tam olarak doğru olan davranışlardan kaçınmak ve yanlış bir şeyle değiştirmek istersiniz? XML'de, bir URL'de bile, ve işareti her zaman öncelenmelidir.Bunun için endişelenmenize gerek yok, XML ayrıştırıcı diğer ucunu unescape olacak. –

cevap

4

Ampersands böyle kodlanmış olmalıdır. Değiştirmek yanlış olur.

görün http://www.w3.org/TR/xml/

imi (&) ve sol açılı ayraç (<) işaretleme ayracı olarak kullanılmaları dışında, kendi edebi formda ortaya çıkabilir veya bir yorum içindeki bir işleme DEĞİL GEREKİR talimat veya bir CDATA bölümü. Onlar başka bir yerde yapılması gerekiyorsa, bunlar sayısal karakter referansları veya dizeleri sırasıyla &amp; ve &lt; kullanarak kaçan GEREKİR.

ve her iki SGML ve XML, ve işareti karakteri ("&") olarak

http://www.w3.org/TR/xhtml1/#C_12 bir varlık referansı başlangıcını ilan eder (örneğin tescilli marka sembolü için &reg; "®"). Ne yazık ki, birçok HTML kullanıcı aracısı, HTML belgelerinde ampersan karakterinin yanlış kullanımını sessizce göz ardı etmişlerdir. XML tabanlı kullanıcı aracıları bu yanlış kullanıma tahammül edemez ve "ve" işareti hatalı kullanan herhangi bir belge "geçerli" olmaz ve sonuç olarak bu belirtime uymaz. Belgelerin, tarihsel HTML kullanıcı aracıları ve XML tabanlı kullanıcı aracıları ile uyumlu olmasını sağlamak için, bir belgede kullanılan ve tam karakter olarak ele alınacak olan ve kullanılmakta olan bir işareti, bir başvuru kaynağı olarak ifade edilmelidir (ör. "&amp;"). Bir elemanın href özelliği parametreleri alır bir CGI yazısını ifade eder, örneğin, bu şekilde http://my.site.dom/cgi-bin/myscript.pl?class=guest&amp;name=user olarak değil, Gordon bahsedilen olarak

+0

Cevabınız için teşekkür ederiz. Sadece bağlantının böyle çalıştığını fark ettim. – Catalin

+0

Bu yanlış başlatılıyor. URI ile - ve aşağıda belirtildiği gibi geçerli XML sözdizimi ile ilgili yapılacaklar ile ilgisi yoktur. Kullanılan örneklerin URI'lar olduğu gerçeği, "Ben & Jerry" nin çok iyi olabileceğinden alakasız. (Bağlantılar ve alıntılar dahil olmak üzere geri kalanı için +1.) –

+0

@pst true, Bunu geliştirebilirim. yapacağım. – Gordon

2

http://my.site.dom/cgi-bin/myscript.pl?class=guest&name=user olarak değil, URI kodlanmış ifade edilmelidir. Bir &amp; için & kodlamak olmadıysa, XML dosyası berbat olacağını - Eğer hatalar ayrıştırma iyi olur. htmlspecialchars_decode()

$str = str_replace('&amp;', '&', $str)

Veya kullanın:: Ne zaman &amp hala gelirse böyle ya str_replace(), geri XML dosyasının dışına dize almak

$str = htmlspecialchars_decode($str);

avantaj htmlspecialchars_decode() kullanarak, dizede olabilecek başka bir HTML'nin kodunu çözmesidir. Daha fazla bilgi için, see here. geçerli XML ise

+0

Bu URI ile - ve Gordon tarafından belirtildiği gibi geçerli bir XML sözdizimi ile ilgisi yoktur. Kullanılmakta olan XML kütüphanesi (neyse ki) geçerli XML'in üretilmesini sağlar (bu durumda). –

İlgili konular