我面临一个问题。我通过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 $result
。12%
即可添加额外的内容。请帮我解决这个问题。
答案 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的任何浏览器都会很乐意对其进行编码你,可能会破坏它。