IE PHP ile gömülmüş XML kodu hata veriyor

2 Cevap xml

Bu kod IE dışındaki tarayıcılarda çalışıyor.

echo "
<item>
<link>http://www.example.com/showrssdetails.php?id=".$row[recordid]."</link>
<guid isPermaLink=\"true\">http://www.example.com/showrssdetails.php.php?id=".$row[recordid]."</guid>
<title>".$row[company]."</title>
<description><! [CDATA[".$row[desiredcandidate]."]]></description>
<comments>http://www.example.com/showrssdetails.php.php?id=".$row[recordid]."#Comments</comments>
</item>";

IE line 6 hata verir:

*An invalid character was found in text content. Error processing resource 'http://example.com/job_listing_rssxml.php...

2 Cevap

Bu olmalı

<![CDATA

değil

<! [CDATA

orada sonunda '>' bulur ve onu sevmez.

You also need to change all '"', '<' and '>' inside your php code snippet to html entities. You should do it this way:

...
<![CDATA[".htmlspecialchars($row['desiredcandidate'])."]]>
...

Ve bu gibi dışarı geri almak:

htmlspecialchars_decode($string)
<title>".$row[company]."</title>

XML-enjeksiyon firması < içeren ya da eğer &. htmlspecialchars() Eğer biçimlendirme içine eklemek istediğiniz metni kodlamak için kullanın. (Bu HTML gibi, XML için sadece iyi çalışır. htmlentities, diğer taraftan, olmaz.)

<description><! [CDATA[".$row[desiredcandidate]."]]></description>

CDATA bölümünde başıboş uzay, olması gerektiği <![CDATA[ ... ]]>. ]]> metin içeriği kendi geçersiz olduğuna dikkat ediniz.

Her iki şekilde de, CDATA bölümleri gerçekten yardımcı değildir. Bu çıkış kaçan sorumluluğu sizi temize çıkarmaz: bir dize ]]> değeri hala iyi biçimlilik kıracak. CDATA bölümleri el-yazma kolaylık sağlamak için bir hack, sen makine tarafından üretilen XML koymak istiyorum değil genellikle bir şey vardır.

Bu durumda zaten some kaçan yapmak zorunda olduğu göz önüne alındığında, CDATA'da hakkında unutmadan ve sadece bunu normal bir şekilde yapıyor daha kapalı:

<description><?php echo htmlspecialchars($row['desiredcandidate']); ?></description>

(Ya h() çok yazarak önlemek için, echo htmlspecialchars sizin için yapmak gibi kısa bir isimde bir fonksiyon önceden tanımlayabilirsiniz.)

(: Gelecekte başarısız olabilir, bu muğlak avoid using bare-word array indices, ve NOTICEs üretecektir. Unutmayın.)