2012-04-02 8 views
6

Chromeをエンコードするこの変換:aöüßから%C3%A4%C3%B6%C3%BC%C3%9F しかし、Firefoxは、ここで、この奇妙なことに、それを変換しますa%F6%FC%DF 私はPHPで元に戻し、Firefoxのものに変換する方法を見つけるように見えることはできません。 残念ながら、Urldecodeとrawurldecodeは機能しません。誰もそれに対処する方法を知っていますか?ありがとう。違いのFirefox - クロムウムラウトに

答えて

5

はすでに推測:Firefoxはラテン-1を使用しながら、ChromeはURLパラメータのUTF-8(おそらく推奨されているように)を使用しています。私はあなたがこの動作を制御できるとは思わない。また、これは扱いにくいでしょう。使用されたエンコーディングを推測する必要がかなりあるからです。

これは、どのように、復号化作品(ブラウザに依存し、アプリケーションでUTF-8を使用していると仮定して):

クローム:

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

のFirefox:

$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

+0

ええ、私はFirefoxがまだLatin-1に固執しているのは実際には驚いています。 – Niko

+0

驚くばかり!この機能は私のために完璧に動作します – Stefan

1

ページにUTF-8を使用させます。おそらく、これらのコードは異なるコード化ウムラウトです。 1つはLatin1のようなもので、もう1つはおそらく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

+0

?text =aöüßはurlencodedされていません。 JavaScriptでエンコードするには、エンコードを保持するために、encodeURIcomponentが必要です。 PHPでエンコードするには、rawurlencodeを使用できます。アイテムをrawurldecodeする場合、rawurldecodeが必要かどうかわかりません。 – Tei

+0

Firefoxのページに?text =aöüßを追加すると、%F6%FC%DF – Stefan

関連する問題