2012-04-02 15 views
6

Chrome codiert, wandelt diese: aöüß-%C3%A4%C3%B6%C3%BC%C3%9F Aber Firefox wandelt es in diese seltsame Sache hier: a%F6%FC%DF Ich kann nicht einen Weg zu finden, scheinen die Firefox Sache wieder auf den ursprünglichen in PHP zu konvertieren . urldecode und rawurldecode leider nicht funktionieren. Weiß jemand, wie man damit umgeht? Vielen Dank.Difference Firefox - Chrome, wenn Umlaute

Antwort

5

Wie Tei bereits vermutet: Chrome verwendet UTF-8 (wie wahrscheinlich empfohlen) für URL-Parameter, während Firefox Latin-1 verwendet. Ich glaube nicht, dass Sie dieses Verhalten kontrollieren können. Auch das wird schwierig zu handhaben sein, da Sie ziemlich genau die verwendete Kodierung erraten müssen.

Dies ist, wie die Decodierung Werke (browserabhängig, vorausgesetzt, dass Sie UTF-8 in Ihrer Anwendung verwenden):

Chrome:

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

Firefox:

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

Dies kann eine Lösung sein, die in den meisten Fällen funktioniert:

0 zu zwingen, UTF-8 durch einen Header mit PHP zu senden und mit Hilfe von Tags html Meta arbeitete nichts
function urldecode_utf8($text) { 
    $decoded = urldecode($text); 

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

    return $decoded; 
} 
+0

Danke, das hat funktioniert. Aber diese verschiedenen Browser verhalten sich einfach nur -.- – Stefan

+0

Ja, ich bin wirklich überrascht, dass Firefox hier immer noch an Latin-1 klebt. – Niko

+0

Super! Die Funktion funktioniert einwandfrei für mich – Stefan

1

Kraft Ihrer Seite UTF-8 zu verwenden. Wahrscheinlich sind diese Codes unterschiedlich codierte Umlaute. Eins ist etwas wie Latin1 und das andere ist vielleicht UTF-8.

Der beste Weg, utf-8 zu zwingen, ist in einem Meta-Tag im HTML.

+0

ich schon versucht. Und es ist keine Form btw, nur ein normaler get-Parameter? Text = aöüß – Stefan

+0

? Text = aöüß ist nicht urlencodiert. Um in Javascript zu kodieren, benötigen Sie encodeURIcomponent, um die Kodierung beizubehalten. Um in PHP zu codieren, können Sie rawurlencode verwenden. Ich weiß nicht, ob Sie rawurldecode benötigen oder nicht, wenn Sie einen Artikel rawurlodecodieren. – Tei

+0

Fügen Sie Text = aöüß zu einer Seite in Firefox hinzu und Sie werden sehen, dass es es automatisch zu einem% F6% FC kodiert. – Stefan