2013-03-21 134 views
6

我有一個像GET HTTP URL參數 <p>我該怎麼辦?</p> <p>感謝</p>

test.php?x=hello+world&y=%00h%00e%00l%00l%00o 

一個URL時,我把它寫到文件

file_put_contents('x.txt', $_GET['x']); // -->hello world 
file_put_contents('y.txt', $_GET['y']); // -->\0h\0e\0l\0l\0o 

,但我需要將它寫入未編碼

file_put_contents('x.txt', ????); // -->hello+world 
file_put_contents('y.txt', ????); // -->%00h%00e%00l%00l%00o 
汽車解碼

回答

4

由於該$_GET$_REQUEST超全局變量會自動通過解碼功能(相當於urldecode())運行,你只需要重新urlencode()數據得到它匹配在URL字符串傳遞的字符:

file_put_contents('x.txt', urlencode($_GET['x'])); // -->hello+world 
file_put_contents('y.txt', urlencode($_GET['y'])); // -->%00h%00e%00l%00l%00o 

我已經在本地測試了它,它的工作完美。但是,從您的評論中,您可能也想看看您的編碼設置。如果urlencode($_GET['y'])結果是%5C0h%5C0e%5C0l%5C0l%5C0o然後它會顯示您傳遞的null character在(%00)被解釋爲一個字符串"\0"(如級聯到0字符\字符),而不是正確地解釋\0作爲一個單一的空字符。

你應該看看PHP documentation on string encoding and ASCII device control characters

+0

無法正常工作。它會返回x - > hello + world,y - >%5C0h%5C0e%5C0l%5C0l%5C0o – user1725661 2013-03-21 05:52:56

+0

@ user1725661 - 然後發生其他事情。我只是測試了這個,它工作正常...看到我的擴展答案。 – 2013-03-21 16:32:27

0

我認爲你可以使用urlencode()來傳遞URL中的值和urldecode()來獲取值。

+0

無法正常工作。它返回x - > hello + world,y - >%5C0h%5C0e%5C0l%5C0l%5C0o – user1725661 2013-03-21 12:49:55

3

您可以從$ _SERVER [「QUERY_STRING」]變量中獲取未編碼的值。

function getNonDecodedParameters() { 
    $a = array(); 
    foreach (explode ("&", $_SERVER["QUERY_STRING"]) as $q) { 
    $p = explode ('=', $q, 2); 
    $a[$p[0]] = isset ($p[1]) ? $p[1] : ''; 
    } 
    return $a; 
} 

$input = getNonDecodedParameters(); 
file_put_contents('x.txt', $input['x']); 
+0

這是正確的答案,因爲Ben D.建議的重新編碼以不同的方式處理某些字符(如斜槓)。 – 2017-02-05 10:28:12

相關問題