php文章内容内链功能,相同关键字只内链一次

版权声明:本文为博主原创文章,未经博主允许不得转载。 https://blog.csdn.net/T_Struggle/article/details/74202480
/**

 * 文章详情匹配一次关键字内链
 *
 * @param  $content string 文章内容
 * @param  $arr     array  关键字数组
 * @param  $url     string 内链url
 * @param  $suffix  string url后缀
 */
function articleInner($content, $arr, $url, $suffix='.html'){
    $regular = '<a .*>.*<\/a>|<img .*>|<iframe .*>.*<\/iframe>';
    $chunkeds = preg_split("/($regular)/Ui", $content, -1, PREG_SPLIT_DELIM_CAPTURE|PREG_SPLIT_NO_EMPTY);    
    $tagArr = array();

    foreach ($chunkeds as $k => $val) {
        $bool = preg_match("/($regular)/Ui", $val);  
        if(!$bool){
            foreach ($arr as $key => $value) {
                if(($position = strpos($val,$value['name']))!==false && !in_array($value['name'], $tagArr)){
                    $leng     = strlen($value['name']);
                    $replIntro = "<a href='".$url.$value['id'].$suffix."' target='_blank'>".$value['name']."</a>";
                    $val       =  substr_replace($val,$replIntro,$position,$leng);
                    $tagArr[]  = $value['name']; //记录已内链的关键字
                }
            }
            $chunkeds[$k] = $val;
         }
    }
    return implode('', $chunkeds);
}

猜你喜欢

转载自blog.csdn.net/T_Struggle/article/details/74202480