首页
学习
活动
专区
工具
TVP
发布
社区首页 >问答首页 >如何删除querystring而只获取url?

如何删除querystring而只获取url?
EN

Stack Overflow用户
提问于 2011-08-07 07:20:33
回答 12查看 192.3K关注 0票数 228

我正在使用PHP来构建当前页面的URL。有时,URL的形式为

代码语言:javascript
复制
www.mydomian.com/myurl.html?unwantedthngs

是被请求的。我想删除?及其后面的所有内容(querystring),这样得到的URL就变成:

代码语言:javascript
复制
www.mydomain.com/myurl.html

我当前的代码是:

代码语言:javascript
复制
<?php
function curPageURL() {
    $pageURL = 'http';
    if ($_SERVER["HTTPS"] == "on") {
        $pageURL .= "s";
    }
    $pageURL .= "://";
    if ($_SERVER["SERVER_PORT"] != "80") {
        $pageURL .= $_SERVER["SERVER_NAME"] . ":" .
            $_SERVER["SERVER_PORT"] . $_SERVER["REQUEST_URI"];
    } else {
        $pageURL .= $_SERVER["SERVER_NAME"] . $_SERVER["REQUEST_URI"];
    }
    return $pageURL;
}
?>
EN

回答 12

Stack Overflow用户

发布于 2011-08-08 03:02:53

您可以在第一次出现?之前使用strtok获取字符串

代码语言:javascript
复制
$url = strtok($_SERVER["REQUEST_URI"], '?');

strtok()是在查询字符串中的?之前直接提取子字符串的最简洁的技术。explode()不那么直接,因为它必须生成一个可能包含两个元素的数组,必须通过该数组访问第一个元素。

当查询字符串丢失或潜在地改变url中的其他/非预期的子串时,一些其他技术可能会中断--这些技术应该被避免。

一个demonstration

代码语言:javascript
复制
$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)]); // not reliable
    echo "\n";
    var_export(['explode/2: ', explode('?', $url, 2)[0]]);  // limit allows func to stop searching after first encounter
    echo "\n";
    var_export(['substr/strrpos: ', substr($url, 0, strrpos( $url, "?"))]);  // not reliable; still not with strpos()
    echo "\n---\n";
}

输出:

代码语言:javascript
复制
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,                       // bad news
)
array (
  0 => 'explode/2: ',
  1 => 'www.example.com/myurl.html',
)
array (
  0 => 'substr/strrpos: ',
  1 => '',                          // bad news
)
---
票数 654
EN

Stack Overflow用户

发布于 2014-07-31 11:54:59

最佳解决方案:

代码语言:javascript
复制
echo parse_url($_SERVER['REQUEST_URI'], PHP_URL_PATH);

如果您要向同一个域提交表单,则不需要在中包含您的http://domain.com

票数 61
EN

Stack Overflow用户

发布于 2011-08-07 07:23:12

代码语言:javascript
复制
$val = substr( $url, 0, strrpos( $url, "?"));
票数 16
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/6969645

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档