DomingoSL
DomingoSL

Reputation: 15494

Removing anchor (#hash) from URL

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/

Upvotes: 11

Views: 13647

Answers (4)

Paulo Costa
Paulo Costa

Reputation: 337

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'] : '');
}

Upvotes: 0

Arnaud Le Blanc
Arnaud Le Blanc

Reputation: 99909

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

Upvotes: 28

Robert
Robert

Reputation: 20286

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/

Upvotes: 3

Sam
Sam

Reputation: 2970

Alternative way

$url = 'http://site.com/some/#anchor';
echo str_replace('#'.parse_url($url,PHP_URL_FRAGMENT),'',$url);

Upvotes: 0

Related Questions