Reputation: 15494
Is there any reliable way in PHP to clean a URL of anchor tags?
So input:
Outputs:
Upvotes: 11
Views: 13647
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
Reputation: 99909
$url = strstr($url, '#', true);
Shorter way, using strtok
:
$url = strtok($url, "#");
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];
Obligatory regex solution:
$url = preg_replace('/#.*/', '', $url);
Purl is neat URL manipulation library:
$url = \Purl\Url::parse($url)->set('fragment', '')->getUrl();
Upvotes: 28
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
Reputation: 2970
Alternative way
$url = 'http://site.com/some/#anchor';
echo str_replace('#'.parse_url($url,PHP_URL_FRAGMENT),'',$url);
Upvotes: 0