2017-04-05 42 views
-2

需要幫助解決錯誤,如下面,需要幫助來取代PHP中的preg_replace_callback?

preg_replace(): The /e modifier is no longer supported, use preg_replace_callback instead in line 601 

了錯誤下面的代碼,

$string = preg_replace('~&#x0*([0-9a-f]+);~ei', 'chr(hexdec("\\1"))', $string); 
$string = preg_replace('~&#0*([0-9]+);~e', 'chr(\\1)', $string); 

AM嘗試等。

$string = preg_replace_callback('~&#x0*([0-9a-f]+);~ei', 'chr(hexdec("\\1"))',function ($match) { 
return ($match[1]); 
}, $string); 

但仍然有這樣的錯誤?

Requires argument 2, 'chr(hexdec("\1"))' 
+0

的[替換爲預浸\ _replace()e修飾符可能的複製preg \ _replace \ _callback](http://stackoverflow.com/questions/15454220/replace-preg-replace-e-modifier-with-preg-replace-callback) –

+0

很累但不工作。 –

+0

你試過的代碼在哪裏?你在哪裏試圖通過匿名函數作爲第二個參數? –

回答

1

由於錯誤表示,該e修改不再在你的PHP版本的支持。

preg_replace_callback相當於是這樣的:

$string = preg_replace_callback('~&#x([0-9a-f]+);~i', function ($m) { 
    return chr(hexdec($m[1])); 
}, $string); 

注意:在您的正則表達式的0*是不需要的,因爲零是由遵循這個模式拍攝,並且它不打擾有那些零在捕獲組中捕獲。

,因爲你是一個PHP版本等於或高於5.5(如those versions produce the error),你可以依靠html_entity_decode

$string = html_entity_decode($string);