【问题标题】:How to parse Special Characters with PHP into MySQL?如何用 PHP 将特殊字符解析到 MySQL 中?
【发布时间】:2012-10-05 05:30:54
【问题描述】:

我正在使用 PHP 解析一些数据并将其放入 MySQL。但是如果数据中包含êm-Khê这样的特殊字符,MySQL会输出以下错误:

SQLSTATE[HY000]: General error: 1366 Incorrect string value: '\xEAm-Kh\xEA...'

经过我的测试,MySQL 不是问题。 (表和列排序规则是utf8_general_ci)当我直接(手动)将êm-Khê 字符串插入表中时,它会进入表中。所以 MySQL 可以接受这些数据。

那么知道为什么在 PHP 级别会出现此错误吗?

我对编码知识不是很了解,也不是很了解。

  • 为什么ê在查询中变成\xEA

所以当我得到像ê 这样的数据时,我如何将它放入数据库中,因为它是ê 不变的?

【问题讨论】:

标签: php unicode encoding special-characters


【解决方案1】:

所以问题是您的数据库连接不是 UTF8,而可能是 LATIN1,所以您必须在连接到数据库后使用 PHP 的函数 utf8_encode() 或执行 SET NAMES utf8

$handle = new PDO("mysql:host=localhost;dbname=dbname",
'username', 'password',
array(PDO::MYSQL_ATTR_INIT_COMMAND => "SET NAMES utf8"));

This thread 有一些很好的参考和解释

【讨论】:

  • PDO?对不起,我不明白你的意思。我正在使用mysql_connect。不是这样的。
  • 哦,好的,我通过使用 php utf8_encode() 方法得到了它。谢谢 x)
  • 值得一提的是,在 5.3.6 之后你应该使用;charset=utf8 作为连接字符串的一部分。
【解决方案2】:

我的猜测是 PHP 和 MySQL 之间存在编码不匹配。 ê 并没有真正“转换”成\xEA,只是MySQL 不知道EA 应该是什么字节序列,因此只是抱怨原始字节错误。您首先需要知道 PHP 中字符串的编码是什么;这取决于他们来自哪里。然后您需要设置正确的 MySQL 连接编码,以便 MySQL 知道您发送它的字符串的编码。如何做到这一点取决于您连接到数据库的方式。

请参阅Handling Unicode Front To Back In A Web App 了解整个过程的概要。

【讨论】:

  • 您好,PHP中字符串的源编码是utf-8,它来自XML。我的意思是,XML 被编码为utf-8
  • 然后仔细检查在您发送到数据库的查询上使用bin2hex,并检查您的连接编码设置为。
【解决方案3】:

您可以使用此功能。 mysql_real_escape_string($user), mysql_real_escape_string($password));

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2010-10-12
    • 1970-01-01
    • 2011-05-03
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多