【问题标题】:PHP Sax Parser and UTF-8PHP Sax 解析器和 UTF-8
【发布时间】:2011-11-23 22:54:18
【问题描述】:

不幸的是,我在使用 php sax 解析器和 utf-8 编码时遇到了一些问题。

案例:

我有一个用 utf-8 编码的 xml 文件。该文件使用标准的 php sax 解析器进行解析。数据存储到一些容器对象中并插入到 mysql 数据库中。不幸的是,数据库中的某些字符看起来很奇怪(主要是德语变音符号)。例如,Gürtel 看起来像 Gürtel。

以下代码片段显示了解析器是如何实例化的:

$saxParser = xml_parser_create("UTF-8");

这足以解析 utf-8 文件吗?如果是,我错过了什么?插入时有一些特殊的数据库内容?

提前致谢。

【问题讨论】:

  • 你的数据库文本列有什么排序规则?您是否使用“SET NAMES 'UTF8'”将 MySQL 编码设置为 UTF-8?
  • @ZombieHunter 我的排序规则是 utf8_general_ci

标签: php utf-8 saxparser


【解决方案1】:

一步步检查编码,找出无效代码:

  1. 打印您从 XML 中检索到的值
  2. 打印出您构建的 SQL 语句

打印值时,请确保您的浏览器使用正确的编码读取输出。

您必须确保每个组件都使用正确的编码:

PHP 脚本

保存您的 PHP 并将编码设置为 UTF-8 不带 BOM,因为这可能会导致问题。处理 UTF-8 字符串时仅使用 multibyte string functions

XML 文件

XML 文件以 <?xml version="1.0" encoding="UTF-8" ?> 并且文件已正确保存,编码设置为 UTF-8。

SQL 列(排序规则)

VARCHAR(length) [CHARACTER SET charset_name] [COLLATE collation_name]

MySQL服务器与PHP脚本之间的通信

打开与 MySQL 服务器的连接后立即运行此命令:

SET NAMES 'UTF8'

SET NAMES 表示客户端将使用什么字符集发送 SQL 向服务器声明。 http://dev.mysql.com/doc/refman/5.0/en/charset-connection.html

【讨论】:

  • 多亏了你,我才可能弄清楚这些语句的编码不正确。 “SET NAME 'UTF8'”解决了这个问题。非常感谢!
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2012-11-07
  • 1970-01-01
  • 1970-01-01
  • 2011-02-25
  • 2011-08-14
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多