Removing anchor (#hash) from URL

后端 未结 4 504
天命终不由人
天命终不由人 2021-01-02 09:11

Is there any reliable way in PHP to clean a URL of anchor tags?

So input:

http://site.com/some/#anchor

Outputs:

http://site.com/some/

相关标签:
4条回答
  • 2021-01-02 09:29

    Using parse_url():

    function removeURLFragment($pstr_urlAddress = '') {
        $larr_urlAddress = parse_url ( $pstr_urlAddress );
        return $larr_urlAddress['scheme'].'://'.(isset($larr_urlAddress['user']) ? $larr_urlAddress['user'].':'.''.$larr_urlAddress['pass'].'@' : '').$larr_urlAddress['host'].(isset($larr_urlAddress['port']) ? ':'.$larr_urlAddress['port'] : '').$larr_urlAddress['path'].(isset($larr_urlAddress['query']) ? '?'.$larr_urlAddress['query'] : '');
    }
    
    0 讨论(0)
  • 2021-01-02 09:34

    Using strstr()

    $url = strstr($url, '#', true);
    

    Using strtok()

    Shorter way, using strtok:

    $url = strtok($url, "#");
    

    Using explode()

    Alternative way to separate the url from the hash:

    list ($url, $hash) = explode('#', $url, 2);
    

    If you don't want the $hash at all, you can omit it in list:

    list ($url) = explode('#', $url);
    

    With PHP version >= 5.4 you don't even need to use list:

    $url = explode('#', $url)[0];
    

    Using preg_replace()

    Obligatory regex solution:

    $url = preg_replace('/#.*/', '', $url);
    

    Using Purl

    Purl is neat URL manipulation library:

    $url = \Purl\Url::parse($url)->set('fragment', '')->getUrl();
    
    0 讨论(0)
  • 2021-01-02 09:40

    Alternative way

    $url = 'http://site.com/some/#anchor';
    echo str_replace('#'.parse_url($url,PHP_URL_FRAGMENT),'',$url);
    
    0 讨论(0)
  • 2021-01-02 09:42

    There is also one other option with parse_url();

    $str = 'http://site.com/some/#anchor';
    $arr = parse_url($str);
    echo $arr['scheme'].'://'.$arr['host'].$arr['path'];
    

    Output:

    http://site.com/some/
    
    0 讨论(0)
提交回复
热议问题