我目前正在从api中提取一些数据。 我对数据没有任何控制权,但是在某些字符串上其他字符上有空格,而在其他字符串上则需要删除一些其他字符。我通过这样做解决了
trim($firstLineText, "\u{200d} \t\n\r\0\x0B")
以上内容确保字符串正确。但是现在我不能将其插入到sql数据库中。我收到此错误:
1366 Incorrect string value: '\x9CJD\xE2\x80\x9D' for column
该字段设置为varchar。根据我的理解,Trim应该只是修剪这些字符,是否添加了其他一些因素导致了这种情况?
编辑:我最初遇到的问题是字符串之一是 当我按字符串检查此“ e2808d20202020202020202020202020202020c4c4c43”时,它显示出此“âLLC”。
答案 0 :(得分:3)
正如@mario在注释中正确指出的那样,trim
仅适用于字节级别,而不适用于unicode字符。
unicode char“ \ 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空格字符!