2014-09-01 81 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