2008-09-30 7 views
42

Bir php scriptim var. Komut dosyası çoğu zaman iyi çalışan html'yi döndürür, ancak bir kerede (parametre = Biçim = XML) betik HTML yerine XML döndürür.php cinsinden çıkış türünü değiştir değiştir

php çıktısının döndürülmüş mime türünü metin/html'den text/xml veya application/xml'ye dönüştürmenin herhangi bir yolu var mı? yerine

header('Content-Type: text/xml'); 

muhtemelen kullanmalısınız rağmen "application/xml": header()

+0

Ne yapmaya çalıştığınız hakkında daha fazla bilgi verebilir misiniz? yani RSS, xhtml vs. Bu hatayı da buldum: http://support.microsoft.com/kb/264868/ – joelhardi

+0

Herhangi bir metin çıktısını almadan önce üstbilgi aramasını kullandığınızdan emin olun –

+0

Whoah, benim hatam, IE'de çalışıyor - XML ​​nesil kodum vardı büyük bir hata yaptım (bazı öğreticilerden kopyaladım ve htmlentities kullanarak HTML'yi HTML'ye dönüştüren çıktı satırını okumadım. Üzgünüm !!! – Sam

cevap

97
header('Content-type: application/xml'); 

fazla bilgi Content-Type başlığını ayarlayın.

+0

Web servis istemcisi oluşturan Microsoft Visual Studio API'sinin "application/xml" yi beğenmediğini, bunun yerine "text/xml" gerektirdiğini gördüm. – GTodorov

13

için PHP belgelerine mevcut

+1

Beni yakaladın - metin/xml ve application/xml arasındaki fark nedir? – Sam

+0

Metin/* içerik türleri arasındaki etkileşimler Kodlama ile ilgili HTTP, özellikle: bkz. Http://annevankesteren.nl/2005/03/text-xml –

+5

Önbellek proxy'lerinin karakter kodlamasını değiştirmek için text/* 'düzenlenmesine izin verilir. XML ayrıca, belgenin içindeki karakter kodlamasını da bildirdiğinden, bunun gerçekleşmesini istemezsiniz, çünkü bir yanlış eşleşme olabilir. Bunun yerine 'application/xml' komutunu kullanın ve proxy'leri önbelleğe alırken içeriği ikili veri olarak görür ve rahatsız edilmeden bırakır. – TRiG

3

'dan önce herhangi bir çıktı göndermeden önce Content-Type başlığını göndermelisiniz.

header('Content-Type: text/xml'); 
3

Önceki yanıtlar iyi olduğundan güncellemeyi yanıtlayacağım.
Internet Explorer'ın, çoğu zaman (bazı durumlarda sorunlara neden olabilecek) dosya içeriğine güvenmek için Mime tipi üstbilgileri (çoğu zaman?) Görmezden geldiği iyi biliniyor.

<?php 
header('Content-Type: text/xml'); 
echo '<?xml version="1.0" encoding="UTF-8" standalone="yes"?> 
<root><foo a="b">Tada</foo></root>'; 
?> 

Internet Explorer 6 görüntüler bunu doğru XML olarak:

Mmm, basit bir test yaptım. Xml bildirimini kaldırsam bile.
Hangi sürümün sorunlu olduğunu belirtmelisiniz.

Aslında, yukarıda yazdığım gibi, IE ile (en az 6), bir içerik türüne bile ihtiyacınız yoktur, XML verilerini tanır ve bir ağaç olarak görüntüler. XML’iniz doğru mu?

[Güncelleştirmeler] IE7 ile de denenmiş, XML formatını hala doğru göstererek? Format = xml ekleyerek. Hatalı XML gönderirseniz, IE bir hata görüntüler. WinXP Pro SP2 +

+0

Özür dilerim, benim hatam, kopyaladığım örnek kod, çıktı için htmlentity aracılığıyla XML'i gönderdi ve şimdiye kadar fark etmedim! – Sam

+0

Ah! TAMAM. :-) Hepimiz hatalardan (diğer insanlardan olanlar bile) öğreniyoruz. – PhiLho

+0

Sanırım IE 6'nın bir sorunu olduğu metin/xhtml; Daha önce hiç oynamamıştım ama bunun hakkında birçok şikayet duydum. Metin/xhtml gönderirseniz IE 6'nın işe yaramayacağına inanıyorum, ama emin değilim. – dirtside

0

Yalnızca aşağıdakileri kullandım:
NOT: Geliştirilmiş genişletme için "i" kullanıyorum. Aynı çizgide de kodlamayı ekleyebilir her

while ($row = @mysqli_fetch_assoc($results)){ 
    // Add to XML document node 
    echo '<marker '; 
    echo 'id="' . $ind . '" '; 
    echo 'name="' . parseToXML($row['name']) . '" '; 
    echo 'address="' . parseToXML($row['address']) . '" '; 
    echo 'lat="' . $row['lat'] . '" '; 
    echo 'lng="' . $row['lng'] . '" '; 
    echo 'type="' . $row['type'] . '" '; 
    echo '/>'; 
} 

// End XML file 
echo "</marker>"; 
0
header('Content-Type: application/xml; charset=utf-8'); 

için satırlar baskı XML düğümleri arasında

Start XML file, echo parent node 
header("Content-type: text/xml"); 
echo "<?xml version='1.0' encoding='UTF-8'?>"; 
echo "<marker>"; 

Bıkmadan. En yaygın olan utf-8'i ekledim.