删除锚文本以及外部链接

时间:2013-08-06 14:39:55

标签: php wordpress

我正在使用这个php脚本从我的wordpress帖子中删除外部链接(而不是内部链接):

if ( ! preg_match_all( "/(<a.*>)(.*)(<\/a>)/ismU", $content, $outbound_links, PREG_SET_ORDER ) ) {
    return $content;
}

foreach ( $outbound_links as $key => $value ) {
    preg_match( "/href\s*=\s*[\'|\"]\s*(.*)\s*[\'|\"]/i", $value[1], $href );

    if ( ( substr( $href[1], 0, 7 ) != 'http://' && substr( $href[1], 0, 8 ) != 'https://' ) || substr( $href[1], 0, strlen( get_bloginfo( 'url' ) ) ) == get_bloginfo( 'url' ) ) {
        unset( $outbound_links[ $key ] );
    } else {
        $content = str_replace( $outbound_links[ $key ][0], $outbound_links[ $key ][2], $content );
    }
}

但是此脚本删除了'a'标记但不删除了锚文本(例如,它会将<a href="http://externalsite.com">external site</a>转换为external site,而我还想删除锚文本external site。到目前为止,我没有成功修改这个脚本来做我想做的事,你能帮助我吗?

1 个答案:

答案 0 :(得分:2)

如果您改变以$content =开头的行,它应该可以工作:

if ( ! preg_match_all( "/(<a.*>)(.*)(<\/a>)/ismU", $content, $outbound_links, PREG_SET_ORDER ) ) {
    return $content;
}

foreach ( $outbound_links as $key => $value ) {
    preg_match( "/href\s*=\s*[\'|\"]\s*(.*)\s*[\'|\"]/i", $value[1], $href );

    if ( ( substr( $href[1], 0, 7 ) != 'http://' && substr( $href[1], 0, 8 ) != 'https://' ) || substr( $href[1], 0, strlen( get_bloginfo( 'url' ) ) ) == get_bloginfo( 'url' ) ) {
        unset( $outbound_links[ $key ] );
    } else {
        $content = str_replace( $outbound_links[ $key ][0], '', $content );
    }
}

原因是,在它的当前状态下,它会替换正则表达式中第二个匹配所找到的链接,但是您想要将其全部删除,只需将其替换为“#39;&#39;&#39;&#39;&#39 ;