PHP 8.1中preg_replace_callback回调失效的修复方案
PHP 8.1下原有链接转换代码的修复方案
你的代码在PHP8.1环境报错的核心原因是create_function()函数已被移除——该函数在PHP7.2起被标记为废弃,PHP8.0及以上版本彻底删除了这个函数。
修复方法是将create_function()替换为PHP官方推荐的匿名函数,以下是修改后的完整代码:
$comment_content = preg_replace_callback( '/\[([^][]*)]\(([^()]*)\)|(\b(?:(?:https?|ftp):\/\/|www\.)[-a-z0-9+&@#\/%?=~_|!:,.;]*[-a-z0-9+&@#\/%=~_|])/i', function($m) { if(isset($m[3])) { return "<span><a href=\"{$m[3]}\" target=\"_blank\">آدرس بدون عنوان</a></span>"; } else { return "<span><a href=\"{$m[2]}\" target=\"_blank\">{$m[1]}</a></span>"; } }, $comment_content );
修改说明
- 移除了
create_function()调用,直接使用function($m) { ... }形式的匿名函数作为回调 - 调整了字符串的引号处理:使用双引号包裹HTML内容,并用
{$变量名}的语法直接嵌入变量,避免了原代码中繁琐的字符串拼接和转义,代码可读性更强 - 保持了原有正则表达式的匹配逻辑和链接转换的业务逻辑不变
内容的提问来源于stack exchange,提问作者Martin AJ
相关产品推荐
相关产品推荐

