Yük XML Dosya Php - Giriş uygun değil UTF-8

3 Cevap php

Im oldukça php yeni ve uzak bir yerden bir xml kaynağını yüklemeye çalışırken im, bu yüzden biçimlendirme hiçbir kontrole sahip. Unfortanely yüklemeye çalışırken xml dosyası im no kodlama vardır:

<ROOT xmlns:sql="urn:schemas-microsoft-com:xml-sql"> <NODE> </NODE> </ROOT>

: Gibi bir şey denerken

$doc = new DOMDocument( );
$doc->load(URI);

Alıyorum:

Input is not proper UTF-8, indicate encoding ! Bytes: 0xA3 0x38 0x2C 0x38

Ive bu gizlensin yollarını baktı, ama hayır şans. Ben DOMDocument ile kullanabilirsiniz böylece nasıl ben bu yük gerekir?

Teşekkürler!

3 Cevap

Bunu bir XML bildirimi ekleyerek teslim ediliyor kodlamayı belirtmek için Belgeyi ('pre-process it') düzenleme olabilir. Ne olduğunu, sen tabii ki, kendiniz tespit etmek gerekir. DOM nesnesi daha sonra ayrıştırmak gerekir.

XML bildirimi örneği:

<?xml version="1.0" encoding="UTF-8" ?>

Yerine XMLReader sınıfını kullanarak deneyebilirsiniz. XMLReader XML için özel olarak tasarlanmış ve (hiçbiri için 'boş' dahil) kullanmak için ne kodlama için seçenekler vardır.

Ben benzer bir durum için koştu. UTF-8 olarak kodlanmış olması gerekiyordu bir XML dosyası başlamıştı, ancak bazı kötü ISO karakterler dahil.

UTF-8 için kötü karakterleri kodlamak için aşağıdaki kodu yazdı

<?php

# The XML file with bad characters
$filename = "sample_xml_file.xml";

# Read file contents to a variable
$contents = file_get_contents($filename);

# Find the bad characters
preg_match_all('/[^(\x20-\x7F)]*/', $contents, $badchars);

# Process bad characters if some were found
if(isset($badchars[0]))
{
        # Narrow down the results to uniques only
        $badchars[0] = array_unique($badchars[0]);

        # Replace the bad characters with their UTF8 equivalents
        foreach($badchars[0] as $badchar)
        {
                $contents = preg_replace("/".$badchar."/", utf8_encode($badchar), $contents);
        }
}

# Write the fixed contents back to the file
file_put_contents($filename, $contents);

# Cleanup
unset($contents);

# Now the bad characters have been encoded to UTF8
# It will now load file with DOMDocument
$dom = new DOMDocument();
$dom->load($filename);

?>

I posted about the solution in more detail at: http://dev.strategystar.net/2012/01/convert-bad-characters-to-utf-8-in-an-xml-file-with-php/