【发布时间】: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 修饰符。谁能指出我的错误并举例说明我应该如何做到这一点?
【问题讨论】: