使用该方法成功输出结果:
function replace_unicode_escape_sequence($match) {
return mb_convert_encoding(pack('H*', $match[1]), 'UTF-8', 'UCS-2BE');
}
$name = '\u65b0\u6d6a\u5fae\u535a';
$str = preg_replace_callback('/\\\\u([0-9a-f]{4})/i', 'replace_unicode_escape_sequence', $name);
echo $str; //输出: 新浪微博
参考网址:https://blog.csdn.net/gongqinglin/article/details/80062695
上面的方法亲测有效
下面是使用chatgpt输出的结果,亲测也是可以的,其实是一样的方法,只是变个顺序。
<?php
$unicode_string = '\u4f60\u597d\uff0c\u4e16\u754c\uff01';
$decoded_string = preg_replace_callback('/\\\\u([0-9a-fA-F]{4})/', function ($match) {
return mb_convert_encoding(pack('H*', $match[1]), 'UTF-8', 'UCS-2BE');
}, $unicode_string);
echo $decoded_string; // 输出:你好,世界!
?>
这个例子中,我们使用 preg_replace_callback()
函数找到所有匹配 \u
后跟四个十六进制数字的字符串。然后我们使用一个匿名函数(回调函数)来处理这些匹配项。在这个回调函数中,我们首先使用 pack()
函数将匹配到的十六进制数字转换为二进制字符串,然后用 mb_convert_encoding()
函数将其从 UCS-2BE 编码转换为 UTF-8 编码。
发布者:彬彬笔记,转载请注明出处:https://www.binbinbiji.com/php/2173.html