2014-09-01 107 views
1

我有一个非常奇怪的问题与$_GET变种。

这是我的代码:

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%

回答

4

因为%ca为Ê(0xCA)的URL编码形式

%应该被编码为%25

有趣的是,%wifi%作品......我本来期望它返回400 Bad Request为...

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