如果源XML声明具有其他编码,SimpleXML会将所有文本转换为UTF-8。因此,生成的SimpleXMLElement中的所有文本都将自动为UTF-8。
在我的情况下,源代码具有以下XML decl:
<?xml version="1.0" encoding="windows-1251" ?>
我应该怎样做以获得正常输出?因为,正如你可以想象的那样,现在我得到了stange符号。
感谢。
答案 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类:/[ю]/
将无法正常工作,/(ю)/
将会发挥作用。