我有一个XML文件,我在php中使用SimpleXML进行解析。第一行是
<?xml version="1.0" encoding="iso-8859-1"?>
如果我这样做,则解析的结果存储在$xml
中:
echo $xml->asXML();
然后整个文件显示完美。
但是如果我无论如何都要深入研究这个结构,我就会无处可去,例如:
echo $xml->Chapter->asXML();
在一些XML元素中有MathML(<math>
),这就是Â发生的地方。
例如,字符∈
被替换为。
如何解析XML文件但不丢失MathML字符?
答案 0 :(得分:2)
∈不是可以在ISO 8859-1中表示的字符,更改您的XML以表示它是使用UTF-8编码的。
举例说明问题。
$x = simplexml_load_string('<?xml version="1.0" encoding="iso-8859-1"?>
<example><math>∈</math></example>');
echo $x->math, PHP_EOL;
$x = simplexml_load_string('<?xml version="1.0" encoding="utf-8"?>
<example><math>∈</math></example>');
echo $x->math, PHP_EOL;
输出(以UTF-8表示)以下内容。
â
∈
当encoding
设置为不同时,SimpleXML将尝试转换为UTF-8。当输入已经是UTF-8编码并且encoding
声明不正确时,最好不要让它工作。
还要确保PHP本身输出UTF-8,并告诉浏览器这是这种情况!
您可以通过设置default_charset
INI选项(在php.ini中或使用ini_set()
)或发送正确的Content-Type
标题(header('Content-Type: text/html; charset=utf-8')
)来执行此操作。
答案 1 :(得分:0)
问题不在于您的编码,问题是并非所有浏览器都支持MathML您的script回显到浏览器。
http://en.wikipedia.org/wiki/MathML#Web_browsers
在以下浏览器中对此进行了测试:
答案 2 :(得分:-1)
在使用SimpleXML解析输入之前,您可能需要将输入转换为其他编码。
为此,函数iconv()非常有用: http://php.net/manual/en/function.iconv.php