2010-10-26 10 views
16

MySql db tabanlı bir xml basan bir php dosyam var.Veerste XML hatası (&)

Her seferinde tam olarak bir & işaretinin bulunduğu yerde bir hata alıyorum.

$query = mysql_query($sql); 

$_xmlrows = ''; 

while ($row = mysql_fetch_array($query)) { 
    $_xmlrows .= xmlrowtemplate($row); 
} 

    function xmlrowtemplate($dbrow){ 
    return "<AD> 
      <CATEGORY>".$dbrow['category']."</CATEGORY> 
      </AD> 
    } 

çıktı yani dosya doğru kategoriyi çıkarır, ne istiyorum, ama yine de bir hata veriyor: İşte

bazı php olduğunu. xmlParseEntityRef:

hata diyor hiçbir isim

Ve sonra bir & işaretidir kesin karakterine işaret eder.

Bu $dbrow['category'] örneğin içinde bir & işareti olan bir şey olduğu takdirde yakınır: "arabalar & kamyonlar" veya "bilgisayarlar & telefonlar".

Sorunun ne olduğunu bilen var mı?

BTW: Tüm belgelerde ve xml çıktısında kodlama UTF-8 olarak ayarlanmış. XML'de

cevap

33

& bir varlığı başlatır. &WhateverIsAfterThat numaralı bir öğeyi tanımlamadığınız için bir hata atılır. &amp; ile çıkmalısınız.

How do I escape ampersands in XML

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

diğer ayrılmış karakterler kaçmak için:

function xmlEscape($string) { 
    return str_replace(array('&', '<', '>', '\'', '"'), array('&amp;', '&lt;', '&gt;', '&apos;', '&quot;'), $string); 
} 
+0

(Toplama, ancak poster için) Böylece &'u doğru şekilde kullanmak için kullanın - (dumb) dize enterpolasyonu yerine * * XML'i anlatan bir şey kullanmalısınız (örn. girdi "<" içerdiğinde ne olur? –

+11

Veya, m kompakt, 'htmlspecialchars ($ string, ENT_QUOTES); – Wrikken

+1
İlgili konular