preg_replace()函數使用/e修飾符可能帶來安全隱患,PHP5.5之后,該用法被拋棄使用,升級為preg_replace_callback()。在新版本下運行老版本的代碼,會出現錯誤,如:
Deprecated: preg_replace(): The /e modifier is deprecated, use preg_replace_callback instead in D:\xampp\htdocs\eccore\view\template.php on line 726
這時需要將函數進行改寫。
打開錯誤提示中相應的文件,找到對應函數:
$val = preg_replace("/\[([^\[\]]*)\]/eis", "'.'.str_replace('$','\$','\\1')", $val);
改寫為:
$val = preg_replace_callback("/\[([^\[\]]*)\]/is", function($matches){ return '.'.str_replace('$','\$','$matches[1]'); }, $val);
$matches[1]代表捕獲的第一個子組,$matches[0]則代表完全匹配的字符串。具體改寫方法是,將原來的第二個參數變為回調函數,在函數中返回原來第二個參數相同的值。
這兩個函數原型可參閱官方文檔:http://php.net/manual/zh/function.preg-replace.php
