【问题标题】:preg_replace_callback with arraypreg_replace_callback 与数组
【发布时间】:2016-09-09 05:49:04
【问题描述】:

我最近将我的网站更新为 PHP 5.6,从那以后,我开始使用 e 修饰符出现错误。

这是导致问题的函数:

function blockPrepareDisplay() {
static $search = array('/(.)@(.)/se');
static $replace = array('"&#" .sprintf("%03d", ord("\\1")) .";@&#" .sprintf("%03d", ord("\\2")) . ";";');
$resarray = array();
foreach (func_get_args() as $var) {
    $var = htmlspecialchars($var, ENT_QUOTES);// Prepare var
    $var = preg_replace($search, $replace, $var);
    $var = preg_replace('/&#/', '&#', $var);
    $var = str_replace(" "," ",$var);
    $var = str_replace("&","&",$var);
    $resarray[] = $var;// Add to array
}
if (func_num_args() == 1) {// Return vars
    return $resarray[0];
} else {
    return $resarray;
  }
}

我知道 static $search = array('/(.)@(.)/se'); 行是带有 e 修饰符的行,我知道它已被弃用。一位朋友向我解释了这一点,并解释说我需要用preg_replace_callback 替换preg_replace。我看过 php.net 和这里的所有内容,但我认为这让我比以往任何时候都更加困惑。

我已经尝试了几个星期了很多不同的东西,我得到了一个停止吐出错误的东西,但我很肯定它是错误的,我更喜欢它是对的而不是错误的。我这样做是为了替换 preg_replace

$var = preg_replace_callback(
$search,
function($replace){
    foreach($replace as $replaces){
        return $replaces;
    }
}, 
$var
);

而不是$var = preg_replace($search, $replace, $var);。 我也确实删除了 e 修饰符。谁能指出我的错误并举例说明我应该如何做到这一点?

【问题讨论】:

    标签: php preg-replace-callback


    【解决方案1】:

    回调函数的参数是匹配组的数组。

    我不明白您为什么要使用数组进行搜索和替换部件,我会这样做:

    $var = "abc@def.org";
    
    $var = preg_replace_callback(
            '/(.)@(.)/',
            function($match) {
                return sprintf("&#%03d;@&#%03d;", ord($match[1]), ord($match[2]));
            },
            $var
        );
    echo $var,"\n";
    

    输出:

    abc@def.org
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2014-05-19
      • 1970-01-01
      • 2017-05-18
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多