这是一个自我问答;A
我发现自己经常需要解析CMS用户提供的URL,以确定它是外部URL还是内部URL。客户通常希望以不同的方式突出显示外部URL,或者强制他们使用target="_blank"。
因此,我想要一段代码,它可以解析URL并确定它是内部URL还是外部URL,然后为任何一种场景返回不同的类和目标。
下面的代码将URL作为字符串,然后将两个不同的类名作为字符串,并将URL与主机进行比较(如果需要,我还注释了一段WordPress特定的代码(。
function parse_external_url( $url = '', $internal_class = 'internal-link', $external_class = 'external-link') {
// Abort if parameter URL is empty
if( empty($url) ) {
return false;
}
// Parse home URL and parameter URL
$link_url = parse_url( $url );
$home_url = parse_url( $_SERVER['HTTP_HOST'] );
//$home_url = parse_url( home_url() ); // Works for WordPress
// Decide on target
if( empty($link_url['host']) ) {
// Is an internal link
$target = '_self';
$class = $internal_class;
} elseif( $link_url['host'] == $home_url['host'] ) {
// Is an internal link
$target = '_self';
$class = $internal_class;
} else {
// Is an external link
$target = '_blank';
$class = $external_class;
}
// Return array
$output = array(
'class' => $class,
'target' => $target,
'url' => $url
);
return $output;
}
你会使用这样的代码:
$url_data = parse_external_url( 'http://www.funkhaus.us', 'internal-link-class', 'external-link-class' );
<a href="<?php echo $url_data['url']; ?>" target="<?php echo $url_data['target']; ?>" class="<?php echo $url_data['class']; ?>">This is a link</a>