我正在尝试将一些内容写入XML文件,但我确实遇到了特殊字符的问题。
我想写的内容是通过$_GET
提交给脚本的,因此我认为它已正确解码为UTF-8内容。
$write = $_GET['content'];
将像:
一样喂食file.php?content=s%F6per
在PHP中,我执行以下操作:
$xml = simplexml_load_file('file.xml');
$newentry = $xml -> addChild('element',$write);
$xml -> asXML($xml_filename);
打开的XML文件是UTF-8编码的。当我在没有任何“问题字符”的情况下编写内容时,asXML会再次将文件保存为UTF-8。一旦我插入特殊字符,它就会以ANSI编码保存,因为我将无法打开文件(脚本会抱怨编码不当)。
我错过了什么?阅读手册给我的印象是我应该做的一切都好(即不要弄乱$_GET['content']
),所以我很遗憾没有线索。
非常感谢!
答案 0 :(得分:2)
您的特殊字符看起来不是UTF-8,而是ISO-8859-1字符
见这里 - http://www.degraeve.com/reference/urlencoding.php
可能的解决方案
$newentry = $xml->addChild('element', htmlentities($write));
或
$newentry = $xml->addChild('element', iconv('ISO-8859-1', 'UTF-8', $write));
并且偏离主题,请避免使用$_GET
将某些内容写入文件或插入数据库,这是有风险的