【问题标题】:Change preg_replace into preg_replace_callback [duplicate]将 preg_replace 更改为 preg_replace_callback [重复]
【发布时间】:2015-10-02 12:02:18
【问题描述】:

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

\u0080\u009锥形手尺\u0080\u009d

由于我必须为许多字符串替换这些代码,并且由于 \u0080\u009 有各种组合,例如 \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', pack('V', hexdec('U$1')))",

从原始代码中没有访问任何匹配项发现我很困惑如何设置我的匿名函数

【问题讨论】:

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


    【解决方案1】:

    从 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})/"

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2011-09-13
      • 1970-01-01
      • 2016-05-18
      • 1970-01-01
      • 2017-06-02
      • 2016-02-07
      相关资源
      最近更新 更多