2014-01-08 70 views
1

由於棄用,我們目前正在我們的網站上收到preg_replace錯誤消息。PHP preg_replace替代

我們的代碼如下:

$out = preg_replace('!s:(\d+):"(.*?)";!se', "'s:'.strlen('$2').':\"$2\";'", $data); 

這是如何可以與非過時的代碼來取代任何建議?

回答

4

preg_未被棄用。它只是/e(自PHP 5.5起):

不推薦使用/ e修飾符。改爲使用preg_replace_callback()。 有關安全風險的其他信息,請參閱PREG_REPLACE_EVAL文檔以瞭解更多信息 。

preg_replace_callback()是它採用的回調,而不是替換幾乎完全相同preg_replace()有例外,你的代碼的更新應迅速功課。

+0

我學到新的東西。 upvoted。 – r3wt

0

在這種情況下,我發現這個 「CALLBACK_FUNCTION」 工作正常:

$fixed_text = preg_replace_callback ('!s:(\d+):"(.*?)";!', 
function($m) { 
     return ($m[1] == strlen($m[2])) ? $m[0] : 's:' . strlen($m[2]) . ':"' . $m[2] . '";'; 
}, 
$text);