我正在处理第三方 XML,其中包含特殊字符,如项目符号、长破折号等。
示例 XML:
$xml = "<xml><node>• Special Characters</node></xml>";
我的目标是使用 PHP 解析此 XML 并将其插入 MySQL 数据库。我正在使用 DomDocument
解析 XML,以使用 simplexml_import_dom
从 DOM 节点获取 SimpleXMLElement
对象。
DomDocument
的加载方法失败,除非我使用 utf8_encode 对 xml 进行编码。
$doc = new DOMDocument();
$doc->loadXML(utf8_encode($xml));
为了能够解析 xml,我知道我需要 utf8_encode
函数。在能够解析 XML 后,MySQL 表中的插入将导致特殊字符显示为?或垃圾。即使是来自 XML 的特殊字符,如果在解析后显示在浏览器上也将是垃圾。
MySQL 表列为文本数据类型,并采用 latin1_swedish_ci 排序规则。我在 SO 上看到了类似的问题并尝试了他们的解决方案,例如运行 mysql_query('SET NAMES utf8')
或更改列编码,但它们对我不起作用。
请指教。
最佳答案
问题是您的数据库默认仅适用于 Latin1 编码。您需要将数据库或表(我忘了是哪个,也许两者都忘记了)编码更改为 UTF8。
你可以试试
alter table TABLE_NAME charset utf8
http://wolfram.kriesing.de/blog/index.php/2007/convert-mysql-db-to-utf8
关于XML 的 PHP MySQL 编码问题,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/9847604/