【问题标题】:How do I extract query parameters from a URL string in PHP?如何从 PHP 中的 URL 字符串中提取查询参数?
【发布时间】:2011-06-14 15:07:27
【问题描述】:

用户可以在我的网站上使用 HTML 表单输入 URL,因此他们可能会输入如下内容:http://www.example.com?test=123&random=abc,可以是任何内容。我需要提取某个查询参数的值,在本例中为“test”(值 123)。有没有办法做到这一点?

【问题讨论】:

  • 确实是重复的,但是 parse_url 解决方案导致了一个新问题,请看下面我对 user576875 的评论。
  • 您可以使用strstrexplode 提取从? 开始的字符串,然后将其传递给parse_str
  • 看来我可以使用 strstr,谢谢 Gordon

标签: php regex


【解决方案1】:

主机名是可选的,但至少需要参数字符串开头的问号:

$inputString = '?test=123&random=abc&usersList[]=1&usersList[]=2' ;

parse_str ( parse_url ( $inputString , PHP_URL_QUERY ) , $params );

print_r ( $params );

【讨论】:

    【解决方案2】:

    我需要检查一个与我们的系统相关的 url,所以我不能使用 parse_str。对于任何需要它的人:

    $urlParts = null;
    preg_match_all("~[\?&]([^&]+)=([^&]+)~", $url, $urlParts);
    

    【讨论】:

    • 只是出于好奇,你的系统怎么不支持原生的PHP函数呢?
    • @Vallentin - parse_str() 是在 PHP 4 中引入的......也许(但这不太可能)他有一个早期版本的 PHP
    【解决方案3】:

    您可以像这样使用parse_urlparse_str

    $query = parse_url('http://www.example.com?test=123&random=abc', PHP_URL_QUERY);
    parse_str($query, $params);
    $test = $params['test'];
    

    parse_url 允许将 URL 拆分为不同的部分(方案、主机、路径、查询等);在这里,我们使用它来仅获取查询 (test=123&random=abc)。然后我们可以用parse_str解析查询。

    【讨论】:

    • 似乎 parse_url 在使用某些 URL 时会引发 PHP 错误,请查看 php.net 上的此评论:php.net/manual/en/function.parse-url.php#96433
    • 是的,它似乎不适用于没有 host 组件的 URL。这将适用于有效的类似 HTTP 的 URL。
    • 那么,有没有其他方法可以做到这一点?
    • 它不需要URL中的主机,只需要问号(?)和参数,$query = parse_url('?test=123&random=abc', PHP_URL_QUERY);
    猜你喜欢
    • 2011-08-30
    • 2019-02-18
    • 1970-01-01
    • 1970-01-01
    • 2022-01-17
    • 2017-10-07
    • 1970-01-01
    相关资源
    最近更新 更多