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 错误