首页 >后端开发 >php教程 >如何在 PHP 中有效地从 URL 中删除查询字符串?

如何在 PHP 中有效地从 URL 中删除查询字符串?

DDD
DDD原创
2024-12-04 18:14:12190浏览

How Can I Efficiently Remove Query Strings from URLs in PHP?

获取不带查询字符串的 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中文网其他相关文章!

声明:
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系admin@php.cn