【问题标题】:How do I get the query string of a URL (the parts after the question mark)?如何获取 URL 的查询字符串(问号后面的部分)?
【发布时间】:2013-05-17 01:29:21
【问题描述】:

我怎样才能只从 ? 开始的查询字符串中获取内容:

分段?param1=value1&param2=value2

注意:我只需要“?”之后的所有内容,我也想省略那个字符。

【问题讨论】:

  • 到目前为止你有没有尝试过?
  • 您是否有理由需要使用正则表达式?
  • 使用 $_SERVER['QUERY_STRING'] 从当前 url 获取查询或者只是在 '?' 上展开。
  • 这可能不是正则表达式的工作,而是你选择的语言的现有工具。正则表达式不是你在碰巧涉及字符串的每个问题上挥舞的魔杖.您可能希望使用已经编写、测试和调试过的现有代码。在 PHP 中,使用 parse_url 函数。 Perl:URI module。红宝石:URI module。 .NET:'Uri' class
  • 这不是来自 uri

标签: php regex


【解决方案1】:

如果你确定你的字符串中有一个查询,那么这就可以解决问题:

echo substr( $string, strpos( $string, '?' ) + 1 );

如果您的字符串可能不包含查询,请先检查 - strpos 将返回布尔值 false。

【讨论】:

  • 他也想省略问号。所以应该是strpos+1。
【解决方案2】:

这是正则表达式\?(.+)Rubular to prove it。并使用它:

preg_match("/\?(.+)/", $inputString, $matches);
if (!$matches) {
    // no matches
}

$result = $matches[1];

【讨论】:

  • 我喜欢它,但在 php 中抛出:分隔符不能是字母数字或反斜杠
【解决方案3】:

\?([a-z0-9A-z&=]+)*

这看起来像是在处理 URL,考虑为它们设计的库。如果您只对 ? 之后的所有内容感兴趣,请使用类似

String s = "asegment?param1=value1&param2=value2";
String paramStr = s.substring(s.indexOf('?')-1);

编辑:没有看到您使用的是 PHP - 忽略。

【讨论】:

    【解决方案4】:

    在此之前您有几个选项不需要像这样的正则表达式

    $val = (strpos("?", $url) !== false? substr($url, strpos($url, "?")): "");
    

    或 parse_url

    $val = parse_url($url, PHP_URL_QUERY);
    

    编辑

    没有查询字符串的固定条件

    【讨论】:

    • 这个instr()函数是在哪里定义的?
    • @nickb my bad s/b strpos... 更新帖子感谢您保持诚实
    【解决方案5】:

    这是一个使用strrevstrtok 的简单解决方案...

    $url = "asegment?param1=value1&param2=value2";
    echo strrev(strtok(strrev($url),'?'));
    

    【讨论】:

    • 虽然这行得通,但它似乎是一个冗长的方法。你能评论一下这个与(例如)正则表达式或substr等相比的效率吗?
    【解决方案6】:

    你应该使用 $_GET 全局数组<?php echo $_GET["param1"]; ?>

    【讨论】:

      猜你喜欢
      • 2016-03-09
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2018-05-04
      • 2023-03-16
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多