具有特殊字符的参数在发送获取请求

时间:2018-01-09 12:23:44

标签: php

我面临一个问题。我通过REST API发送数据并使用PHP接受参数值。我在下面解释我的代码。

if($action==11){
   $query=$_SERVER['QUERY_STRING'];
   $result=between('searchKey=', '&', $query);
   echo $result;
}
function after ($this, $inthat)
    {
        if (!is_bool(strpos($inthat, $this)))
        return substr($inthat, strpos($inthat,$this)+strlen($this));
    };
function before ($this, $inthat)
    {
        return substr($inthat, 0, strpos($inthat, $this));
    };
function between ($this, $that, $inthat)
    {
        return before ($that, after($this, $inthat));
    };

我在这里发送如下数据。

http://example.com/spesh/mobileapi/categoryproduct.php?action=11&searchKey=12%

我的问题是,我的输出为12%25的{​​{1}},我只需echo $result12%即可添加额外的内容。请帮我解决这个问题。

1 个答案:

答案 0 :(得分:1)

PHP将传入的URL参数自动解码为$_GET superglobal

如果这不是一个选项(假设URL存储在某处),您可以使用命名不佳的parse_str() function自己解析查询字符串。

最后,要从网址中提取查询字符串,您可以使用parse_url()

这里有一个包含所有部分的完整示例:

$url = 'http://example.com/spesh/mobileapi/categoryproduct.php?action=11&searchKey=12%25';
$query_string = parse_url($url, PHP_URL_QUERY);
parse_str($query_string, $get);
var_dump($query_string, $get);
string(25) "action=11&searchKey=12%25"
array(2) {
  ["action"]=>
  string(2) "11"
  ["searchKey"]=>
  string(3) "12%"
}

standards赋予某些字符某些含义并且%被选为转义字符是没有价值的:

  

百分比编码机制用于表示a中的数据八位字节      当八位位组的相应字符在...之外时的组件      允许设置或被用作的分隔符或内部分隔符      零件。百分比编码的八位字节被编码为字符      三元组,由百分号“%”后跟两个字符组成      表示该八位字节数值的十六进制数字。

这意味着单个文字%需要编码为%25(仍然只代表%)。如果您不遵守自己的规则:您不能使用标准库和函数,并且您可能会混淆第三方 - 例如,您键入URL的任何浏览器都会很乐意对其进行编码你,可能会破坏它。