替代函数 preg_replace e/ 修饰符

Posted

技术标签:

【中文标题】替代函数 preg_replace e/ 修饰符【英文标题】:alternative for function preg_replace e/ modifier 【发布时间】:2012-10-15 12:19:44 【问题描述】:

任何人都知道如何用 preg_replace 和 e/ 修饰符来改变这个函数 e/ 修饰符将被贬值。

function charset_decode_utf_8 ($string) 
      /* Only do the slow convert if there are 8-bit characters */
    /* avoid using 0xA0 (\240) in ereg ranges. RH73 does not like that */
    if (! preg_match("/[\200-\237]/", $string) and ! preg_match("/[\241-\377]/", $string))
        return $string;

    // decode three byte unicode characters
    $string = preg_replace("/([\340-\357])([\200-\277])([\200-\277])/e",
    "'&#'.((ord('\\1')-224)*4096 + (ord('\\2')-128)*64 + (ord('\\3')-128)).';'",
     $string);

    // decode two byte unicode characters
    $string = preg_replace("/([\300-\337])([\200-\277])/e",
    "'&#'.((ord('\\1')-192)*64+(ord('\\2')-128)).';'",
    $string);

return $string;

【问题讨论】:

preg_replace_callback 也和上面的代码在做什么有关:***.com/questions/12848091/… 【参考方案1】:
<?php
$string = preg_replace_callback("/([\340-\357])([\200-\277])([\200-\277])/",
    function($arr) 
        $val = (ord($arr[1]) - 224) * 4096
                + (ord($arr[2]) - 128) * 64
                + (ord($arr[3]) - 128);
        return "&#" . $val . ";";
    , $string);


$string = preg_replace_callback("/([\300-\337])([\200-\277])/",
    function($arr)
    
        $val = (ord($arr[1]) - 192) * 64 + ord($arr[2]) - 128;
        return "&#" . $val . ";";
    , $string);

【讨论】:

以上是关于替代函数 preg_replace e/ 修饰符的主要内容,如果未能解决你的问题,请参考以下文章

php新版本号废弃 preg_replace /e 修饰符

[PHP] PHP7已经删除了preg_replace的e修饰符

无法将带有修饰符 /e 的 preg_replace() 转换为 preg_replace_callback()

未知修饰符 '/' preg_replace()

mpdf 错误 - preg_replace(): /e 修饰符已弃用,请改用 preg_replace_callback

我在字符串上有几个 preg_replace 未知修饰符警告,但我不知道正则表达式修复 [重复]