2016-09-09 12 views
2

私は最近、自分のサイトをPHP 5.6に更新しました。それ以来、私はe修飾子でエラーを出し始めました。配列を含むpreg_replace_callback

は、ここで問題を引き起こし機能である:

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; 
    } 
} 

私は$search = array('/(.)@(.)/se');静的行がe修飾子を持つ行があることを理解し、私はその非推奨のことを知っています。友人はそれを私に説明し、preg_replacepreg_replace_callbackに置き換える必要があることを説明しました。私はphp.netとここまでのところを見てきましたが、それは私がこれまでよりももっとconfuesdを作ったと思います。

私は数週間前からさまざまなことを試みてきましたが、エラーを吐くのをやめさせてもらえましたが、私は間違っていると肯定的です。私はにpreg_replace

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

代わりの$var = preg_replace($search, $replace, $var);の代わりにこれをしました。 また、e修飾子も削除しました。誰かが私の間違いを指摘して、これを正しいものにする方法を例に挙げることができますか?

答えて

0

コールバック関数の引数は、一致するグループの配列です。

あなたが検索し、交換部品の配列を使用している理由を私は理解していない、私がやるだろう:

$var = "[email protected]"; 

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

出力:

abc@def.org