7.0.0版本php 正则表达式不支持 /e 修饰符
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;
}版权属于:Joyber
本文链接:https://blog.qqvbc.com/default/342.html
转载时须注明出处及本声明