清除PHP中的SQL“字符串值不正确”错误

清除PHP中的SQL“字符串值不正确”错误,php,character-encoding,iconv,Php,Character Encoding,Iconv,这个问题我已经问过无数次了,但似乎每个人都想在数据库中解决这个问题。我没有。当解析一个大的文本文件,挑选出我需要的内容并将其插入数据库时,我遇到了这个错误。在大约2400行中,大约有30行包含无效字符 下面是该错误的示例,后面是导致该错误的查询: [查询错误:第1行“公司”列的字符串值不正确:'\xEF\xBC\x89] [插入mac_地址_db_new hex,公司价值'0847D0','Nokia Shanghai Bell Co.Ltd.)] 我要插入的字符串中的“坏”字符可能不会一直出现

这个问题我已经问过无数次了,但似乎每个人都想在数据库中解决这个问题。我没有。当解析一个大的文本文件,挑选出我需要的内容并将其插入数据库时,我遇到了这个错误。在大约2400行中,大约有30行包含无效字符

下面是该错误的示例,后面是导致该错误的查询:

[查询错误:第1行“公司”列的字符串值不正确:'\xEF\xBC\x89]

[插入mac_地址_db_new hex,公司价值'0847D0','Nokia Shanghai Bell Co.Ltd.)]

我要插入的字符串中的“坏”字符可能不会一直出现在您的浏览器中,因此您可能看不到该字符


但我正在寻找一个更简单的解决方案。在我尝试将这些字符发送到MySQL之前,有没有办法在PHP中过滤掉这些字符?我已经使用以下函数进行过滤:trim、mb\u convert\u编码到UTF-8、htmlentities、~some case-related函数~,最后是mysqli\u real\u escape\u字符串。但坏角色仍在继续。我无法控制文本文件的输入

我终于找到了解决办法。我放弃了mb_convert_编码函数,而是使用了iconv,具体如下:

$output=iconv'UTF-8',ISO-8859-1//忽略,$input


显然,忽略部分非常重要。这会在我将字符串发送到数据库之前,悄悄地将这些“坏”字符从字符串中删除

很大程度上取决于数据对用户的价值。从技术上讲,如果读取文本文件,则必须使用编写该文件时使用的编码,如果存储在数据库中,则必须对支持有值字符的字符集使用编码/排序规则,并且必须使用支持传输这些字符的数据库库。如果确切的字符没有比类似的字符更值钱,那么您的技术选择就打开了。表现良好,因为符合我们的期望。