由於棄用,我們目前正在我們的網站上收到preg_replace錯誤消息。PHP preg_replace替代
我們的代碼如下:
$out = preg_replace('!s:(\d+):"(.*?)";!se', "'s:'.strlen('$2').':\"$2\";'", $data);
這是如何可以與非過時的代碼來取代任何建議?
由於棄用,我們目前正在我們的網站上收到preg_replace錯誤消息。PHP preg_replace替代
我們的代碼如下:
$out = preg_replace('!s:(\d+):"(.*?)";!se', "'s:'.strlen('$2').':\"$2\";'", $data);
這是如何可以與非過時的代碼來取代任何建議?
preg_
未被棄用。它只是/e
(自PHP 5.5起):
不推薦使用/ e修飾符。改爲使用preg_replace_callback()。 有關安全風險的其他信息,請參閱PREG_REPLACE_EVAL文檔以瞭解更多信息 。
和preg_replace_callback()
是它採用的回調,而不是替換幾乎完全相同preg_replace()
有例外,你的代碼的更新應迅速功課。
您正在使用修飾符s
和e
。直接從Deprecated feature sin PHP 5.5.x複製:
的
preg_replace()
/e
修改現在已經過時。而應使用preg_replace_callback()
函數。
在這種情況下,我發現這個 「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);
我學到新的東西。 upvoted。 – r3wt