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