php 7.0.0 套餐图片不显示问题 preg_replace 使用了/e 修饰符 (虽然我从没有用过,这里记录一下)
使用 preg_replace_callback 替换

    /**
     * 给文本中的链接加链接
     * @param type $content
     * @return type
     */
    public static function addcontentlink($content) {
        //在处理之前,先要把a或img标签内的排除,先替换
        preg_match_all('/<a.*?href=".*?".*?>.*?<\/a>/i', $content, $linkList);
        $linkList = $linkList[0];
        $str = preg_replace('/<a.*?href=".*?".*?>.*?<\/a>/i', '<{link}>', $content);
        //提取替换出所有的IMG标签(统一标记<{img}>)
        preg_match_all('/<img[^>]+>/im', $content, $imgList);
        $imgList = $imgList[0];
        $str = preg_replace('/<img[^>]+>/im', '<{img}>', $str);
        $str = preg_replace_callback('/(https?:\/\/[a-z0-9;&#@=_~%\?\/\.\,\+\-\!\:]+)/i', function ($match) {
            return static::strip_link($match[0]);
        }, $str);
        if (strpos($str, "http") === FALSE) {
            $str = preg_replace_callback('/(www.[a-z0-9;&#@=_~%\?\/\.\,\+\-\!\:]+)/i', function ($match) {
                return static::strip_link($match[0]);
            }, $str);
        } else {
            $str = preg_replace('/([[:space:]()[{}])(www.[a-z0-9;&#@=_~%\?\/\.\,\+\-\!\:]+)/i', '\1<a href="http://\2" target=_blank rel=nofollow>\2</a>', $str);
        }
        //还原A统一标记为原来的A标签
        $arrLen = count($linkList);
        for ($i = 0; $i < $arrLen; $i++) {
            $str = preg_replace('/<{link}>/', $linkList[$i], $str, 1);
        }
        //还原IMG统一标记为原来的IMG标签
        $arrLen2 = count($imgList);
        for ($i = 0; $i < $arrLen2; $i++) {
            $str = preg_replace('/<{img}>/', $imgList[$i], $str, 1);
        }
        return $str;
    }

标签: none

添加新评论