【发布时间】:2012-03-12 17:54:39
【问题描述】:
我有一个 PHP 脚本可以导入和解析 XML 文件并将数据保存到数据库中:
- 数据库排序规则:
utf8_general_ci,字符集:utf8 - 页面的字符集:
utf-8 - XML 文件:
ANSI,包含智能引号(来自 MS Word)
因此,在导入期间,我在将 XML 文件中的文本保存到数据库并随后显示在页面上之前,对文本执行 utf8_encode()。
但是当成功导入并保存到数据库中时,
- 数据库:智能引号保存为
?字符(从CMD查看) - 页面:智能引号显示为框
关于为什么智能引号没有正确转换的任何想法,即使使用utf8_encode()?
编辑:
@Tomalak:XML 文件实际上是.txt,没有 XML 声明 (<?xml ... ?>),也没有根元素。我的脚本实际上添加了一个根元素,以便解析器工作:
utf8_encode('<article>' . file_get_contents($xmlfile) . '</article>');
好像我需要添加一个 XML 声明..?如果有,应该是什么样子?
【问题讨论】:
-
您能否发布您的 XML 文件的 XML 声明 (
<?xml ... ?>) 以及智能引号中的字符代码(使用十六进制编辑器)? -
@Tomalak,我编辑了我的问题来回答你的评论
-
你有你的错误。添加 XML 声明
<?xml encoding="Windows-1252"?><article> . file_get_contents($xmlfile) . </article>并删除utf8_encode()部分。然后使用DOMDocument解析生成的字符串。只需确保encoding声明与文本文件中的字节匹配即可。 (至少我认为它应该这样工作。) -
@Tomalak:如果您可以将该评论重写为答案,我会将其标记为已接受的答案:) 但是有一个问题,您怎么知道应该使用“windows-1252”?因为我尝试了“iso-8859-1”但它不起作用(我在 Firefox 中打开了 XML (txt) 文件,报告该文件为 iso-8859-1)
-
@Tomalak:还有,怎么不用utf8_encode转成utf8,因为数据库是utf8的?
标签: php mysql xml utf-8 character-encoding