2014-03-25 52 views
0

本頁上的文檔http://ru2.php.net/manual/en/function.urldecode.php表示「超全局變量$ _GET和$ _REQUEST已經被解碼」。

但我的服務器上運行此代碼

var_dump($_GET['str']) 

回報

string(21) "ффф" 

我怎樣才能讓在$ _GET PHP解碼字符串?

+0

你確定它沒有雙重編碼?你能分享你的完整代碼嗎? – mesutozer

+1

應用這個'html_entity_decode($ str,null,'UTF-8');' –

回答

2

你應該在頁面上設置正確的標題內容類型與形式:

header('Content-Type: text/html; charset="UTF-8"'); 

,你應該得到從$正確的數據_GET沒有任何解碼操作。

+0

就是這樣。謝謝! – holden321

1

解碼。該值已經從URL百分比編碼形式解碼。原來,當時可能:

%26%231092%3B%26%231092%3B%26%231092%3B 

現在已經解碼:

ффф 

字符串的內容被轉義HTML。如果您發送的是轉義HTML,您將獲得轉義HTML。如果您不喜歡轉義的HTML,請不要發送轉義的HTML。 PHP不會嘗試在URL值上遞歸地嘗試每種可能的編碼格式,直到沒有其他解碼可以解決爲止。

2

As @deceze指出,該字符串已被解碼。但是,如果要將其轉換爲可讀的字符,請使用html_entity_decode()

$string = 'ффф'; 
echo html_entity_decode($string); 

回報

ффф 

例子:http://3v4l.org/eqDf3

1

&#之後的數字是一個十進制的unicode代碼點,它與UTF-8無關。

http://www.utf8-chartable.de/unicode-utf8-table.pl?start=1024&number=1024&unicodeinhtml=dec,你的性格是:

U+0444 ф d1 84 ф ф CYRILLIC SMALL LETTER EF 

這裏,d1 84是它的UTF-8表示。

如前所述,html_entity_decode("ффф", null, 'UTF-8')應該做的伎倆。

它返回以下字符串:

'ÐäÐäÐä' 

其中十六進制表示,可以發現這樣的:

>> bin2hex($s) 
'd184d184d184' 

這的確是正確的根據之前報價表。