本頁上的文檔http://ru2.php.net/manual/en/function.urldecode.php表示「超全局變量$ _GET和$ _REQUEST已經被解碼」。
但我的服務器上運行此代碼
var_dump($_GET['str'])
回報
string(21) "ффф"
我怎樣才能讓在$ _GET PHP解碼字符串?
本頁上的文檔http://ru2.php.net/manual/en/function.urldecode.php表示「超全局變量$ _GET和$ _REQUEST已經被解碼」。
但我的服務器上運行此代碼
var_dump($_GET['str'])
回報
string(21) "ффф"
我怎樣才能讓在$ _GET PHP解碼字符串?
你應該在頁面上設置正確的標題內容類型與形式:
header('Content-Type: text/html; charset="UTF-8"');
,你應該得到從$正確的數據_GET沒有任何解碼操作。
就是這樣。謝謝! – holden321
那是解碼。該值已經從URL百分比編碼形式解碼。原來,當時可能:
%26%231092%3B%26%231092%3B%26%231092%3B
現在已經解碼:
ффф
字符串的內容被轉義HTML。如果您發送的是轉義HTML,您將獲得轉義HTML。如果您不喜歡轉義的HTML,請不要發送轉義的HTML。 PHP不會嘗試在URL值上遞歸地嘗試每種可能的編碼格式,直到沒有其他解碼可以解決爲止。
As @deceze指出,該字符串已被解碼。但是,如果要將其轉換爲可讀的字符,請使用html_entity_decode()
。
$string = 'ффф';
echo html_entity_decode($string);
回報
ффф
&#
之後的數字是一個十進制的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'
這的確是正確的根據之前報價表。
你確定它沒有雙重編碼?你能分享你的完整代碼嗎? – mesutozer
應用這個'html_entity_decode($ str,null,'UTF-8');' –