字符串上的修剪("u{200d}")后"1366 Incorrect string value"



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

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

上面确保字符串正确。 但是现在我无法将其插入 sql 数据库。 我收到此错误:

1366 Incorrect string value: 'x9CJDxE2x80x9D' for column

该字段设置为瓦尔查尔。 根据我的理解,修剪应该只修剪这些字符,它是否添加了现在导致这种情况的其他东西?

编辑:我最初的问题是其中一个字符串是这个"e2808d2020202020202020202020202020204c43"当我在字符串中检查它时,它会显示这个"â LLC"。

正如

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

Unicode char "\u{200d}" 扩展为三个字节:0xE2 0x80 0x8B

所以

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

可以理解为

trim($firstLineText, "xE2x80x8B")

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

要解决此问题,您可以使用

preg_replace("/(^[x{200d} tnrx0B]+|[x{200d} tnrx0B]+$)/u", "", $str);

但请注意,您可能希望扩展列表,因为还有更多的 unicode 空格字符!

最新更新