simplexml_load_file和编码问题

时间:2010-03-10 18:41:01

标签: php xml

如果源XML声明具有其他编码,SimpleXML会将所有文本转换为UTF-8。因此,生成的SimpleXMLElement中的所有文本都将自动为UTF-8。

在我的情况下,源代码具有以下XML decl:

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

我应该怎样做以获得正常输出?因为,正如你可以想象的那样,现在我得到了stange符号。

感谢。

4 个答案:

答案 0 :(得分:0)

也许是一个愚蠢的答案,但只是不要使用SimpleXML。只需使用DOM。

答案 1 :(得分:0)

尝试使用iconv转换编码。

答案 2 :(得分:0)

使用iconv()函数可以从一种编码转换为另一种编码,TRANSLIT选项可能有效。

$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);

?>

答案 3 :(得分:0)

我的建议是使用UTF-8作为源.php文件编码和(如果可能的话)输出编码。使用gzip压缩Windows-1251和UTF-8回复大小之间的差异(即使对于大多数西里尔文本来说)也很小,而UTF-8在很多方面都更好。 如你所说,simplexml会在xml导入时将windows-1251转换为UTF-8,然后你不必担心任何编码。

如果 使用windows-1251进行输出,请使用以下内容:     iconv_set_encoding(“internal_encoding”,“UTF-8”);     iconv_set_encoding(“output_encoding”,“windows-1251”);     ob_start( “ob_iconv_handler”);

PHP源文件中UTF-8的一个问题是regexp中的char类:/[ю]/将无法正常工作,/(ю)/将会发挥作用。