将preg_replace更改为preg_replace_callback

时间:2015-07-14 02:28:41

标签: php preg-replace preg-replace-callback

我正在尝试替换以下字符串:

  

\ u0080 \ u009cone hand rule \ u0080 \ u009d

因为我必须为许多字符串替换这些代码,并且因为有各种各样的组合,例如\ u00e2 \ u0080 \ u0099和\ u00a0我搜索了一个解决方案,将它们全部转换回相应值。

我发现的解决方案已发布在此网站上:http://www.avoid.org/replace-u-characters-in-json-string/

preg_replace("/\\\\u([a-f0-9]{4})/e", 
             "iconv('UCS-4LE','UTF-8', pack('V', hexdec('U$1')))",  
              json_encode($struct));

当我试图使用此代码时,php引发了以下错误:

  

不推荐使用:preg_replace():不推荐使用/ e修饰符   改为preg_replace_callback

由于我是php的新手,我首先了解了preg_replace,但转换为preg_replace_callback后我完全被过度训练了。我抬头How to convert preg_replace e to preg_replace_callback?但我没弄明白:/

可以解释如何将我的preg_replace转换为preg_replace_callback吗?

我试图开始工作的代码现在看起来像这样:

$string = preg_replace("/\\\\u([a-f0-9]{4})",
              function($match){
                return = iconv('UCS-4LE','UTF-8',pack('V', hexdec('U$1')), $match[1]);                    
              }, 
              json_encode($string));

我已阅读并了解如何访问我找到的匹配项,但自

以来
  

“iconv('UCS-4LE','UTF-8',包('V',hexdec('U $ 1')))”,

从原始代码中找不到任何找到的匹配项我很安静地混淆了如何设置我的匿名函数

1 个答案:

答案 0 :(得分:0)

自PHP 5.5.0起,传入" \ e"时会发出E_DEPRECATED级错误。修改。从PHP 7.0.0开始,在这种情况下会发出E_WARNING和" \ e"修饰符没有效果。

请访问preg_replacepreg_replace_callback了解文档

" / \\ U([A-f0-9] {4})" => " / \\ U([A-f0-9] {4})/"