<?php
$str = "\u5317\u4eac\u5e02";
$str = preg_replace("#\\\u([0-9a-f]{4})#ie", "iconv('UCS-2', 'UTF-8', pack('H4', '\\1'))", $str);
echo $str
?>不明白preg_replace("#\\\u([0-9a-f]{4})#ie", "iconv('UCS-2', 'UTF-8', pack('H4', '\\1'))", $str);是什么意思,求高人解释一下

解决方案 »

  1.   

    preg_replace( /* 使用正则表达式进行替换*/
    "#\\\u([0-9a-f]{4})#ie" /× 正则表达式规则:匹配以\u打头的十六进制数(4个),不区分大小写,并将匹配结果作为参数传递给处理表达式*/
    , "iconv( /× 处理表达式:调用编码转换函数 iconv*/
    'UCS-2' /* 源串编码 */
    , 'UTF-8' /* 目标串编码 */
    , pack('H4', '\\1') /* 转换取得的十六进制数明码为机器码 */
    )"
    , $str /* 被处理的字符串 */
    );
      

  2.   

    就是利用正则匹配出以\u打头的十六进制数(4个),不区分大小写,即\u5317,\u4eac,\u5e02
    并pack转换取得UCS-2编码的字符,再将转换的字符转码为utf-8的字符,再将\u5317,\u4eac,\u5e02这类的字符替换为转码后的utf-8字符。