如何用PHP将特殊字符解析成MySQL?

时间:2012-10-05 05:30:55

标签: php unicode encoding special-characters

我正在使用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

所以,当我得到像ê这样的数据时,我怎么能把它放到数据库中,因为ê不变?

3 个答案:

答案 0 :(得分:3)

所以问题是你的数据库连接不是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有一些很好的参考和解释

答案 1 :(得分:0)

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

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

答案 2 :(得分:-1)

你可以使用这个功能。 mysql_real_escape_string($用户),  mysql_real_escape_string($密码));