获取不带查询字符串的 URL
使用 PHP 为当前页面构建 URL 时,您可能会遇到请求的 URL 包含查询字符串,如:
www.example.com/myurl.html?unwantedthngs
删除查询字符串并获得干净的 URL例如:
www.example.com/myurl.html
您可以利用多功能的 strtok 函数。
$url = strtok($_SERVER["REQUEST_URI"], '?');
strtok() 提供了一种简单的方法来提取第一次出现 ? 之前的 URL 部分。特点。与explode()需要创建一个最多包含两个元素的数组然后提取第一个元素相比,strtok()是一种更直接的方法。
使用其他方法,例如strstr()或substr() 可能会导致不稳定的行为,特别是当查询字符串不存在或包含多个查询参数时。为了说明 strtok() 的有效性,请考虑以下演示:
$urls = [ 'www.example.com/myurl.html?unwantedthngs#hastag', 'www.example.com/myurl.html' ]; foreach ($urls as $url) { var_export(['strtok: ', strtok($url, '?')]); echo "\n"; var_export(['strstr/true: ', strstr($url, '?', true)]); // unreliable echo "\n"; var_export(['explode/2: ', explode('?', $url, 2)[0]]); // limit stops after first encounter echo "\n"; var_export(['substr/strrpos: ', substr($url, 0, strrpos( $url, "?"))]); // unreliable echo "\n---\n"; }
输出:
array ( 0 => 'strtok: ', 1 => 'www.example.com/myurl.html', ) array ( 0 => 'strstr/true: ', 1 => 'www.example.com/myurl.html', ) array ( 0 => 'explode/2: ', 1 => 'www.example.com/myurl.html', ) array ( 0 => 'substr/strrpos: ', 1 => 'www.example.com/myurl.html', ) --- array ( 0 => 'strtok: ', 1 => 'www.example.com/myurl.html', ) array ( 0 => 'strstr/true: ', 1 => false, // unreliable ) array ( 0 => 'explode/2: ', 1 => 'www.example.com/myurl.html', ) array ( 0 => 'substr/strrpos: ', 1 => '', // unreliable ) ---
如输出中所示,strtok 始终返回所需的 URL,不带查询字符串,无论查询字符串是否存在或为空。通过使用 strtok(),您可以有效且可靠地从任何给定请求中提取干净的 URL。
以上是如何在 PHP 中有效地从 URL 中删除查询字符串?的详细内容。更多信息请关注PHP中文网其他相关文章!