2012-04-02 107 views
6

Chrome時,將這個:aöüß%C3%A4%C3%B6%C3%BC%C3%9F 但Firefox將其轉換爲這個奇怪的東西在這裏:a%F6%FC%DF 我似乎無法找到一種方法來Firefox的東西轉換回原來的PHP 。 不幸的是Urldecode和rawurldecode不起作用。有誰知道如何處理?謝謝。差異火狐 - 鉻編碼變音

回答

5

由於Tei已經猜到:Chrome瀏覽器使用UTF-8(可能推薦)用於URL參數,而Firefox使用Latin-1。我不認爲你可以控制這種行爲。此外,這將很難處理,因爲你幾乎需要猜測使用的編碼。

這是怎樣的解碼工作(依賴於瀏​​覽器,假設你使用UTF-8的應用程序):

鉻:

$text = urldecode($_GET['text']); 

火狐:

$text = utf8_encode(urldecode($_GET['text'])); 

這可能是一個適用於大多數情況的解決方案:

function urldecode_utf8($text) { 
    $decoded = urldecode($text); 

    if (!mb_check_encoding($decoded, 'UTF-8')) { 
     $decoded = utf8_encode($decoded); 
    } 

    return $decoded; 
} 
+0

謝謝,那有效。但是,這些不同的瀏覽器行爲只是吸 - - – Stefan 2012-04-02 11:32:57

+0

是的,我真的很驚訝,Firefox仍然堅持拉丁-1在這裏。 – Niko 2012-04-02 11:48:03

+0

太棒了!該功能對我來說完美無缺 – Stefan 2012-04-02 11:51:52

1

強制您的頁面使用UTF-8。這些代碼可能是不同的編碼變音符號。一個是Latin1,另一個可能是UTF-8。

強制utf-8的最佳方式是在html中的元標記中。

<meta http-equiv="Content-Type" content="text/html; charset=UTF-8" /> 
+0

我已經試圖通過發送一個標題與PHP和使用HTML元標記強制UTF-8,沒有任何工作。它不是一個btw形式,只是一個正常的get參數?text =aöüß – Stefan 2012-04-02 11:11:47

+0

?text =aöüß不是urlencoded。要在javascript中進行編碼,您需要encodeURIcomponent以保留編碼。要用PHP編碼,你可以使用rawurlencode。我不知道你是否需要或不需要rawurldecode如果你rawurldecode一個項目.. – Tei 2012-04-02 11:22:56

+0

追加?text =aöüß到Firefox中的頁面,你會發現它會自動編碼它爲%F6%FC%DF – Stefan 2012-04-02 11:26:41