XML 的 PHP MySQL 编码问题

标签 php mysql encoding utf-8 character-encoding

我正在处理第三方 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/

相关文章:

php - 准备好的语句获取行不返回任何内容

SQL泛化/特化、数据冗余

ios - 如何将sps pps(从mp4文件读取)信息添加到每个IDR帧

python - 定义Python源代码编码的正确方法

java - 如何让 Java 匹配 JavaScript 的 encodeURIComponent() 方法?

php - 如何将核心 php 用于 Codeigniter Controller 文件?

PHP 创建 API 连接同一服务器上的 2 个应用程序

javascript - 使用 Ajax 将响应从 PHP 返回到 Jquery

mysql - 宏无法获取正确的数据透视表名称

java - ClusterJ 在初始化域类型处理程序失败后删除架构