2011-08-08 68 views
0

我需要在PHP中將%F3%BE%AE%A2轉換爲此char「」。當我嘗試使用javascript encodeURIComponent在php中相當於

rawurldecode('%F3%BE%AE%A2'); 

然後它給2個字符,而不是1個字符。

如何正確轉換它?

編輯: 更具體地講它是一個UTF-16代理char.it給\udbba\udfa2在javascript.Now 如果我想通過JavaScript API的話,我可以很容易地發送「」作爲單個字符發送數據。 但出於安全原因,我需要使用PHP.That是問題的出發點。解碼'%F3%BE%AE%A2'rawurldecode() along with utf-8 header似乎並沒有給我我想要的字符。 希望我已經解釋它。謝謝你的讚賞。

+0

什麼是PHP用作其輸出字符集?如果你使用UTF-8輸出,但顯示頁面是ISO8859或其他什麼,那麼你會得到垃圾。 –

+0

我想將轉換後的數據發送到api call.so它不像寫入文件。所以有辦法做到這一點嗎? –

+1

PHP可能在內部使用UTF-16嗎?由於您的角色在BMP之外,因此將以UTF-16中的兩個代碼單元表示。默認報告的字符串「長度」通常計數代碼單位而不是字符。你得到哪兩個特殊角色? –

回答

3

其實rawurldecode()正在給你正確的結果。該字符由utf-8編碼時由四個字節組成,url編碼中的規則是將每個字節轉換爲%XX符號。 rawurldecode()給你回4個字節,但可能你沒有把頁面的編碼設置爲utf-8,這樣你的瀏覽器就會誤解這些字節。將此添加到您的<head>

<meta http-equiv="content-type" content="text/html; charset=utf-8" /> 

您應該看到正確的字符。


這是一個測試頁面我提出:

<html> 
<head> 
    <meta http-equiv="content-type" content="text/html; charset=utf-8" /> 
</head> 
<body> 
    <?php echo rawurldecode('%F3%BE%AE%A2'); ?> 
</body> 
</html> 

我在我的瀏覽器中看到:你想看到


完全字符。

+0

以及我用頭('Content-type:text/html; charset = utf-8');在php.Yet事情保持不變。 –

+0

@ neo-nant看看我剛剛做的測試。 'rawurldecode()'工作得很好,你應該到別的地方尋找問題的根源。 – nobody