PHP:simplexml_load_file 从使用 UTF-8 编码的 XML 文件中获取奇怪的字符

Posted

技术标签:

【中文标题】PHP:simplexml_load_file 从使用 UTF-8 编码的 XML 文件中获取奇怪的字符【英文标题】:PHP: simplexml_load_file gets strange characters from an XML file with UTF-8 encoding 【发布时间】:2020-01-05 04:42:53 【问题描述】:

simplexml_load_file() 函数不能很好地解析重音字符。该文件是 UTF-8 编码的,xml 标签的 encoding="UTF-8"。

我正在使用 simplexml_load_file() 函数导入以 UTF-8 编码的 XML 文件。这个文件有一些重音字符,当我执行 print_r() 或 var_dump() 时,重音字符会转换为奇怪的字符。

XML 文件的第一行是

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

在代码中我运行的是基本的

$xFile = simplexml_load_file($xmlFile)

我正在遍历 SimpleXML 对象并获取带有重音字符的单词

$text = (string)$p->i

现在

var_dump($text);

显示Ge├»rriteerd 而不是Geïrriteerd

我试过 get_file_contents() 然后 simplexml_load_string() 和 我也尝试使用 DOMDocument 加载 XML 文件,但显示的是相同的“野生”字符。

还有什么想法可以做吗?

注意:我正在开发 php5.4,这是 PROD 版本,我无法更改。

【问题讨论】:

“当我执行 print_r() 或 var_dump()”时 ????假设您正在浏览器中查看此内容,您是否确定正确设置了页面字符集?见UTF-8 all the way through var_dump() 它在控制台 (ssh) 中,因为解析是在 cronjob 中完成的。 好的,那么你的控制台中的编码是什么? 控制台编码确实是问题之一,之后我发现json_encode() 正在将UTF-8 字符转换为十六进制。我通过将JSON_UNESCAPED_UNICODE 作为第二个参数传递给json_encode() 来解决这个问题。修复来源:***.com/questions/16498286/… 【参考方案1】:

问题是 Windows 控制台默认编码。 我通过运行chcp 65001 将编码更改为UTF-8。

@Phil 的评论很有帮助。

【讨论】:

以上是关于PHP:simplexml_load_file 从使用 UTF-8 编码的 XML 文件中获取奇怪的字符的主要内容,如果未能解决你的问题,请参考以下文章

调用未定义的函数 simplexml_load_file()

PHP-问题处理Fatal error: Uncaught Error: Call to undefined function simplexml_load_file()

RSS不会在PHP中解析(尝试过file_get_contents,curl和simplexml_load_file)[重复]

当我尝试做 simplexml_load_file 时出现 XML 错误

Simplexml_load_file():I/O 警告:未能加载外部实体“”

simplexml_load_file 和 simplexml_load_string 之间的区别