我正在使用 php 将电子邮件内容文本作为 UTF-8 字符串插入到 SQL Server 2008 数据库表中,除了一封特定的电子邮件外,它工作正常。
INSERT 命令失败并出现以下错误:
将查询字符串转换为 UTF-16 时出错:目标多字节代码页中不存在 Unicode 字符的映射。
导致它的文本是电话号码的分机文本:
这个应该是+91-98XXXXXXX(我加了XX)的“xF7”一定变成了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% 的电子邮件,除了一封引发此错误的特殊电子邮件。