php - "1366 Incorrect string value"在字符串上修剪("\u{200d}")之后

标签 php

我目前正在从 api 中提取一些数据。 我对数据没有任何控制权,但在某些字符串上它有空格,而在其他字符串上它有一些我需要删除的其他字符。我通过这样做解决了这个问题

trim($firstLineText, "\u{200d} \t\n\r\0\x0B")

上面确保字符串是正确的。但是现在我不能将它插入到 sql 数据库中。我收到此错误:

1366 Incorrect string value: '\x9CJD\xE2\x80\x9D' for column

该字段设置为 varchar。根据我的理解,Trim 应该只修剪这些字符,是否添加了其他导致此问题的内容?

编辑:我最初遇到的问题是其中一个字符串是 这个“e2808d20202020202020202020202020204c4c43”当我在字符串中检查它时它显示这个“â LLC”。

最佳答案

正如@mario 在评论中正确指出的那样,trim 仅适用于字节级别,不适用于 unicode 字符。

unicode 字符“\u{200d}”扩展为三个字节:0xE2 0x80 0x8B

所以

trim($firstLineText, "\u{200d}")

可以理解为

trim($firstLineText, "\xE2\x80\x8B")

这就是您最终得到损坏的 UTF-8 字符串的原因。

要解决这个问题,你可以使用

preg_replace("/(^[\x{200d} \t\n\r\x0B]+|[\x{200d} \t\n\r\x0B]+$)/u", "", $str);

但请注意,您可能想要扩展列表,因为有更多的 unicode 空白字符!

关于php - "1366 Incorrect string value"在字符串上修剪("\u{200d}")之后,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/55290729/

相关文章:

php - Laravel 什么是使用 HasFactory?

php - 使用PHP替换文本文件中的行

javascript - 有什么方法可以让图像自行调整为固定分辨率但看起来不会很奇怪吗?

php - MySQLi PHP 扩展问题

php - 如何阻止影响我整个 PHP 代码的 PHP sleep()?

php - 将 csv 文件中的值插入到 MySQL 表中

php - 如何刷新和删除当前 URL 上的某些查询

php - 具有相似参数的路由上的路由参数模式

php - Wamp 2.2 安装 PEAR

php - 使用 Laravel 和 Eloquent 查询创建可过滤列表