1

我正在使用这个 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。到目前为止我没有成功修改这个脚本来做我想做的事,你能帮忙吗我在这里?

4

1 回答 1

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 );
    }
}

原因是在它的当前状态下,它用正则表达式中的第二个匹配替换找到的链接,但你想完全删除它,用什么都替换,''。

于 2013-08-06T14:51:02.963 回答