You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

PHP7.4.16下preg_replace的e修饰符废弃,求替换为preg_replace_callback方案

替换preg_replace(e修饰符)为preg_replace_callback的解决方案

原代码因PHP 7.4+废弃preg_replace的e修饰符触发警告,这里直接给出适配preg_replace_callback的修改版本:

$text = preg_replace_callback(
    "#\[img\]((http|ftp|https|ftps)://)([^ \?&=\#\"\n\r\t<]*?(\.(jpg|jpeg|gif|png)))\[/img\]#si",
    function($matches) use ($uid) {
        // 提取正则捕获的分组内容
        $protocol = $matches[1];
        $urlSegment = $matches[3];
        // 替换空格为URL编码的%20
        $encodedSegment = str_replace(' ', '%20', $urlSegment);
        // 拼接成最终的替换字符串
        return "[img:$uid]{$protocol}{$encodedSegment}[/img:$uid]";
    },
    $text
);

关键修改说明:

  • 移除了原正则末尾的e修饰符,保留si(s让.匹配换行符,i忽略大小写)
  • 用匿名函数作为回调处理匹配结果,通过use($uid)引入外部的$uid变量(原代码依赖该变量,必须显式传入回调)
  • 原代码中\\1对应$matches[1](协议部分),\\3对应$matches[3](图片链接主体部分),直接通过数组访问即可
  • 原替换字符串中的PHP代码逻辑,直接在回调函数中以原生PHP代码实现,避免了e修饰符的安全风险和兼容性问题

内容的提问来源于stack exchange,提问作者Rovsan

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.06.25 08:45:07