simplexml_load_file ve kodlama sorunu

4 Cevap php

Kaynak XML bildirimi başka bir kodlama varsa SimpleXML, UTF-8 içine tüm metin dönüştürmek olacaktır. Yani, sonuçta SimpleXMLElement tüm metin otomatik olarak UTF-8 olacak.

Benim durumumda kaynak decl aşağıdaki XML vardır:

<?xml version="1.0" encoding="windows-1251" ?>

Ne normal çıktı almak için bunu yapmak gerekir? Tahmin edebileceğiniz gibi, şimdi ben stange sembolleri olsun, Çünkü.

Teşekkürler.

4 Cevap

Belki aptalca bir cevap, ama sadece SimpleXML kullanmayın. Sadece DOM kullanmak.

Kodlama dönüştürmek için iconv kullanmayı deneyin.

Eğer başka bir encodign dönüştürebilirsiniz iconv () fonksiyonunu kullanarak, DAMGAÇEVİRİSİ seçeneği işe yarayabilir.

$xml = {STRING CONTAINING YOUR XML FILE DATA};

<?php

// convert string from utf-8 to iso8859-1
//$xml = iconv( "UTF-8", "ISO-8859-1//TRANSLIT", $xml);
$xml = iconv( "YOUR_ENCODING", "UTF-8//TRANSLIT", $xml);

?>

My advice is to use UTF-8 as source .php files encoding and (if possible) output encoding too. With gzip compression difference between size of windows-1251 and UTF-8 replies (even for mostly Cyrillic text) is minimal and UTF-8 is better in many ways. As you said, simplexml will convert windows-1251 to UTF-8 on xml import and then you don't have to worry about any encodings.

If you have to use windows-1251 for output then use something like: iconv_set_encoding("internal_encoding", "UTF-8"); iconv_set_encoding("output_encoding", "windows-1251"); ob_start("ob_iconv_handler");

UTF-8 PHP kaynak dosyaları için bir ketçap regexplerde karakter sınıfları şunlardır: /(ю)/ irade bekleniyor olabilir gibi /[ю]/ çalışmayacaktır.