为什么PHP会说字符串是有效的UTF-8,而PostgreSQL会记录一个;无效字节序列“;尝试将其插入数据库时出错?
我用PHP通过IMAP接收电子邮件 在尝试将每个新传入的电子邮件插入数据库之前,我会进行一次基本检查,以确保正文文本(纯文本和HTML版本,如果都存在)是“有效的UTF-8”,如果不存在,我会将其删除并跳过进一步处理。我使用以下代码来实现这一点,在花了数年的时间在网上搜索和尝试之后,我决定使用以下代码: 有时,这似乎无关紧要,因为一封电子邮件会传递到PHP代码,然后PHP代码会将其插入PostgreSQL数据库表,因此会发生以下情况:为什么PHP会说字符串是有效的UTF-8,而PostgreSQL会记录一个;无效字节序列“;尝试将其插入数据库时出错?,php,postgresql,unicode,encoding,utf-8,Php,Postgresql,Unicode,Encoding,Utf 8,我用PHP通过IMAP接收电子邮件 在尝试将每个新传入的电子邮件插入数据库之前,我会进行一次基本检查,以确保正文文本(纯文本和HTML版本,如果都存在)是“有效的UTF-8”,如果不存在,我会将其删除并跳过进一步处理。我使用以下代码来实现这一点,在花了数年的时间在网上搜索和尝试之后,我决定使用以下代码: 有时,这似乎无关紧要,因为一封电子邮件会传递到PHP代码,然后PHP代码会将其插入PostgreSQL数据库表,因此会发生以下情况: pg_query_params(): Query faile
pg_query_params(): Query failed: ERROR: invalid byte sequence for encoding "UTF8": 0xa0:
不管我事先做了什么检查,有些总是漏掉,记录错误。一次又一次
我到底需要做什么才能确保它永远不会发生?!我的代码有什么问题?为什么PHP说它是有效的UTF-8,而PostgreSQL则不是?!这怎么可能呢
最近的一封电子邮件,促使我再次尝试询问此事,是一封只有HTML部分的乱七八糟的垃圾邮件。它包含了混乱的UTF-8。当然,不管它包含什么,也不管是什么解析出来的。重要的是PHP将其视为“OK”,PG将其视为“错误”,因此,该死的错误会被记录下来,而不是像我所希望的那样,整个电子邮件被默默忽略
我做错了什么?这已经折磨了我很长一段时间了,我需要一劳永逸地解决它 你确定这不仅仅是:的重复,你还没有将DB的编码设置为UTF-8吗?是的,我确定这不是该问题的重复。我总是这样,因为我从来没有问过“重复项”。是的,我非常肯定所有的东西都在使用UTF-8:PHP、DB连接和PG数据库。@好吧,如果你这么肯定的话,那么错误就不会发生,你的问题也就不存在了。@LaurenzAlbe很明显它会发生,因为它确实发生了?我不懂你的逻辑。
pg_query_params(): Query failed: ERROR: invalid byte sequence for encoding "UTF8": 0xa0: