PHP问题$ _GET

时间:2014-09-01 11:40:40

标签: php get

我对$_GET var。

有一个非常奇怪的问题

这是我的代码:

if(isset($_GET['offer'])) {
    $params = array();
    $params['wifi'] = "%wifi%";
    $params['publisher'] = "%pubid%";
    $params['framework'] = "%framework%";
    $params['date'] = "%cachebuster%";

    foreach($params as $key=>$param){

    $array[$_GET[$key]] = $_GET[$key];

    }

    print_r($array);
}

这是我发送的网址: http://example.com/track/?offer=g58fFPK49fk4&click_id=%guid%&wifi=%wifi%&publisher=%pubid%&framework=%framework%&date=%cachebuster%

这是我得到的奇怪输出:

Array ( [%wifi%] => %wifi% [%pubid%] => %pubid% [%framework%] => %framework% [Êchebuster%] => Êchebuster% )

为什么%cachebuster%会变成Êchebuster%

3 个答案:

答案 0 :(得分:7)

网址中的百分号会转义特殊字符。该网址似乎被解释为ISO 8869-I,在该字符集中,caÊ的代码。

您应该将网址更改为%正确转义%25

http://example.com/track/?offer=g58fFPK49fk4&click_id=%25guid%25&wifi=%25wifi%25&publisher=%25pubid%25&framework=%25framework%25&date=%25cachebuster%25

答案 1 :(得分:4)

因为%ca是Ê(0xCA)的网址编码形式

%应编码为%25

有趣的是%wifi%有效...我原以为它会为此返回400 Bad Request ...

答案 2 :(得分:0)

在处理“%”字符时,我们应该使用php函数

//should be used for encoding URL
urlencode()
//should be used for decoding URL
urldecode()

在以下链接中查看php文档: http://php.net/manual/en/function.urlencode.php