[英]mb_convert_encoding() with UTF-16 input in PHP > 8.1
我正在更新一个 PHP 应用程序,它导入以 UTF-16 编码的 CSV(来自 Google Keyword Planner)并将值转换为 UTF-8。
直到 PHP 8 它按预期工作,但是从 PHP 8.1 开始有一个?
添加到从 UTF-16 转换为 UTF-8 后的值:
var_dump(mb_convert_encoding("\0008\0008\0000\000", "UTF-8", "UTF-16"));
// Output with PHP 8.1.3 - 8.1.13, 8.2.0:
// string(4) "880?"
// Output with PHP 7.4.32, 8.0.8 - 8.0.26:
// string(3) "880"
您的来源等于"\x00\x38\x00\x38\x00\x30\x00"
,它是 7 个字节,因此对于 UTF-16 来说是一个无效长度,它总是需要每个字符 2 或 4 个字节。
解决方案:提供适当的输入。 也许这也是因为您误解了八进制表示法,并且如果不完全混合表示法和文字会更好地理解它:
方法 | 只有 6 个字节(值'880' ) |
使其成为 8 个字节(值'8800' |
---|---|---|
完整的十六进制表示法 | "\x00\x38\x00\x38\x00\x30" |
"\x00\x38\x00\x38\x00\x30\x00\x30" |
混合十六进制表示法 | "\x008\x008\x000" |
"\x008\x008\x000\x000" |
全八进制符号 | "\000\070\000\070\000\060" |
"\000\070\000\070\000\060\000\060" |
混合八进制表示法 | "\0008\0008\0000" |
"\0008\0008\0000\0000" |
连接字符串以使其更清晰 | "\x00". '8'. "\x00". '8'. "\x00". '0' |
"\x00". '8'. "\x00". '8'. "\x00". '0'. "\x00". '0' |
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.