从URL中删除锚点(#hash)

时间:2013-05-27 12:21:01

标签: php

PHP中有没有可靠的方法来清理锚标记的URL?

所以输入:

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

输出:

http://site.com/some/

4 个答案:

答案 0 :(得分:20)

使用strstr()

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

使用strtok()

更短的方式,使用strtok

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

使用explode()

将url与哈希分开的替代方法:

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

如果您根本不想要$hash,可以在list中省略它:

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

使用PHP版本> = 5.4,您甚至不需要使用list

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

使用preg_replace()

强制性正则表达式解决方案:

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

使用Purl

Purl是一个整洁的URL操作库:

$url = \Purl\Url::parse($url)->set('fragment', '')->getUrl();

答案 1 :(得分:3)

parse_url()还有另外一个选项;

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

输出:

http://site.com/some/

答案 2 :(得分:0)

替代方式

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

答案 3 :(得分:0)

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