我目前正在从 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/