10

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

所以输入:

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

输出:

http://site.com/some/

4

4 回答 4

25

使用 strstr()

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

使用 strtok()

更短的方法,使用strtok

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

使用爆炸()

将 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是一个简洁的 URL 操作库:

$url = \Purl\Url::parse($url)->set('fragment', '')->getUrl();
于 2013-05-27T12:22:43.613 回答
3

parse_url()还有另一种选择;

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

输出:

http://site.com/some/
于 2013-05-27T12:30:50.270 回答
0

替代方式

$url = 'http://site.com/some/#anchor';
echo str_replace('#'.parse_url($url,PHP_URL_FRAGMENT),'',$url);
于 2013-05-27T12:28:56.227 回答
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'] : '');
}
于 2017-08-09T01:13:03.073 回答