将UTF-8字符插入sql server 2008表

时间:2013-04-10 12:43:47

标签: php sql-server-2008 encoding utf-8

我正在使用php将电子邮件内容文本作为UTF-8字符串插入到SQL Server 2008数据库表中,除了一个特定的电子邮件之外它工作正常。

INSERT命令失败并显示以下错误:

  

将查询字符串转换为UTF-16时发生错误:目标多字节代码页中不存在Unicode字符的映射。

导致它的文本是电话号码的扩展文本:

enter image description here

这个“xF7”应该是+ 91-98XXXXXXX(我添加了XX)必须变成UTF-16或其他东西?

在插入数据库之前,我使用mb_detect_encoding进行了UTF-8检查:

$HTMLencode = mb_detect_encoding(HTMLString, mb_detect_order(), true); 

$ PLAINencode = mb_detect_encoding(PLAINString,mb_detect_order(),true);

你可以看到我甚至考虑了“多部分电子邮件” - HTML的一部分和PLAIN文本的一部分。 两个支票都返回 UTF-8 (这意味着“xF7”欺骗了我...... :)。

我也使用UTF-8 // IGNORE做了iconv()以忽略无效字符, 什么都没有帮助,我如何在PHP中解决这个问题?

上述代码适用于99%的电子邮件,但有一个特殊的电子邮件会引发此错误。

1 个答案:

答案 0 :(得分:1)

0xF7在Windows-1252中对÷进行编码。您只是将数据直接传递给数据库吗?

您应该使用能够正确读取电子邮件标题的电子邮件库,其中说明了电子邮件中使用的字符编码。然后,在将文件交给您之前,理想情况下,该库会从该编码转换为UTF-8。

mb_detect_encoding几乎没用,因为它只能访问字节,也不应用任何启发式方法。如果它为具有0xF7的字符串提供UTF-8,则它无法以UTF-8显示