/** * 格式化正文中的图片路径,入库时替换为相对路径,获取详情时替换为绝对路径 */ public function formatContent($content, $type = 'insert') { $imgUrlPrefix = rtrim(Yii::$app->params['cdn_url_prefix'], '/'); $urlData = parse_url($imgUrlPrefix); $host = $urlData['host']; $scheme = $urlData['scheme']; //过滤正文无用内容 if($type == 'insert'){ //过滤js脚本 $pattern = "/<script[\s\S]*?<\/script>/i"; $content = preg_replace($pattern, '', $content); //过滤样式 $pattern = "/<style[\s\S]*?<\/style>/i"; $content = preg_replace($pattern, '', $content); //除img标签外过滤掉标签的所有属性 $pattern ="/<((?!img)[a-z][a-z0-9]*)[^>]*?(\/?)>/i"; $content = preg_replace($pattern,'<$1$2>', $content); //过滤word中font标签 $pattern = "/<font[\s\S]*?>([\s\S]*?)<\/font>/i"; $content = preg_replace($pattern, '$1', $content); //将单个font标签替换为空 $pattern = "/<\/font>|<font[\s\S]*?>/"; $content = preg_replace($pattern, '', $content); //过滤word中xml数据 $pattern = "/<!--\[if gte mso 9\]>[\s\S]*?<!\[endif\]-->/"; $content = preg_replace($pattern, '', $content); //将单个div标签替换 $pattern = "/<\/div>|<div[\s\S]*?>/"; $content = preg_replace($pattern, '', $content); //替换空p标签 $pattern = "/<p><br><\/p>|<p><\/p>/"; $content = preg_replace($pattern, '', $content); //将没有任何标签的文本,用p标签包含 $pattern = "/<\/p>((?!<p>)[\s\S]+?)<p>/"; $content = preg_replace($pattern, "</p><p>$1</p><p>", $content); //将没有任何标签的文本,用p标签包含 $pattern = "/<\/p>((?!<p>)[\s\S]+?)$/"; $content = preg_replace($pattern, "</p><p>$1</p><p>", $content); //过滤掉其他无用标签 $content = strip_tags($content, '<p><img><br>'); } //处理图片,如果是外部图片,替换为空 $pattern = '/<img .*?src=[\"|\'](.*?)[\"|\'].*?\/?>/i'; if(preg_match_all($pattern, strip_tags($content,'<img>'), $matches) > 0) { if($type == 'insert'){ foreach($matches[1] as $key=>$value){ $urlInfo = parse_url($value); if($urlInfo['scheme']."://".$urlInfo['host'] == $scheme.'://'.$host){ $replace = str_replace($imgUrlPrefix, '', $matches[0][$key]); $content = str_replace($matches[0][$key], $replace, $content); }else{ $content = str_replace($matches[0][$key], '', $content); } } $content = preg_replace('/title\s*=\s*[\"|\'].*?[\"|\']/', '', $content); }elseif($type == 'detail'){ foreach($matches[1] as $value){ if(substr($value, 0 , 1) !== '/'){ $replace = $imgUrlPrefix.'/'.$value; }else{ $replace = $imgUrlPrefix.$value; } $content = str_replace($value, $replace, $content); } } } //如果图片没有src属性则过滤掉此img $img_preg = "/<img(?![^<>]*?src[^<>]*?>).*?>/i"; preg_match_all($img_preg,$content,$match); if (isset($match[0]) && count($match[0])) { foreach ($match[0] as $item) { $content=str_replace( $item,'',$content); } } return $content; }