【问题标题】:$_SERVER['REQUEST_URI'] details breakdown$_SERVER['REQUEST_URI'] 详细信息细分
【发布时间】:2011-12-21 23:13:16
【问题描述】:

假设我的请求网址:

http://google.com?asdgeez~user=USERNAME~hash=SECRET_TOKKEN

我想选择像 $data[1], $data[2], $data[3] 这样的数据 它应该看起来像:

Array
(
    [0] => http://google.com?asdgeez
    [1] => USERNAME
    [2] => SECRET_TOKKEN
)

所以基本上它需要删除 ~user=~hash= 部分。 对于功能使用,它可以帮助我分别验证每个值。

有什么办法吗?

【问题讨论】:

    标签: php regex


    【解决方案1】:

    尝试使用正则表达式:

    $input = 'http://google.com?asdgeez~user=USERNAME~hash=SECRET_TOKKEN';
    preg_match('/^(.*?)~\w+=(.*?)~\w+=(.*)$/', $input, $matches);
    
    var_dump($matches);
    
    /*
    array(4) {
      [0]=>
      string(58) "http://google.com?asdgeez~user=USERNAME~hash=SECRET_TOKKEN"
      [1]=>
      string(25) "http://google.com?asdgeez"
      [2]=>
      string(8) "USERNAME"
      [3]=>
      string(13) "SECRET_TOKKEN"
    }
    */
    

    【讨论】:

    • 很好,但是这个char # 怎么样?如果存在,数组就消失了:/
    • @Zero 你没有提到它。可以在什么地方?
    • 在文章中找到答案,stackoverflow.com/questions/4865604/… 这是客户端,而不是服务器。 Markink 已解决。谢谢。
    【解决方案2】:

    嗯……你可以这样试试:

     $data = preg_split('#~(:?\w+=)?#', $_SERVER['REQUEST_URI']);
    

    【讨论】:

      【解决方案3】:
      $uri = "http://google.com?asdgeez~user=USERNAME~hash=SECRET_TOKKEN";
      
      $str1 = explode('~user=', $uri);
      $str2 = explode('~hash=', $str1[1]);
      
      $final = array_merge($str1[0], $str2[0], $str2[1]);
      

      【讨论】:

        猜你喜欢
        • 2018-06-27
        • 2016-11-21
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2010-12-06
        相关资源
        最近更新 更多