PHP - 确定URL是内部URL还是外部URL

时间:2014-08-02 00:46:21

标签: php hyperlink

这是一个自我Q& A

我发现自己经常需要解析CMS用户提供的URL,以确定它是外部URL还是内部URL。通常,客户希望外部URL以不同方式突出显示,或强制使用target =“_ blank”。

所以,我想要一段可以解析URL并确定它是内部URL还是外部URL的代码,然后为这两种情况返回不同的类和目标。

1 个答案:

答案 0 :(得分:3)

下面的代码将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>