2012-04-02 8 views
6

Chrome converte questo: aöüß-%C3%A4%C3%B6%C3%BC%C3%9F Ma Firefox converte in questa strana cosa qui: a%F6%FC%DF io non riesco a trovare un modo per convertire la cosa Firefox di nuovo all'originale in PHP . Urldecode e rawurldecode sfortunatamente non funzionano. Qualcuno sa come affrontarlo? Grazie.Differenza Firefox - Chrome durante la codifica dieresi

risposta

5

Come Tei già indovinato: Chrome utilizza UTF-8 (come probabilmente consigliato) per i parametri URL mentre Firefox utilizza Latin-1. Non penso che tu possa controllare questo comportamento. Anche questo sarà difficile da gestire, perché hai praticamente bisogno di indovinare la codifica che è stata utilizzata.

Questo è come le opere di decodifica (browser-dipendente, supponendo che si sta utilizzando UTF-8 nella propria applicazione):

Chrome:

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

Firefox:

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

Questa può essere una soluzione che funziona nella maggior parte dei casi:

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

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

    return $decoded; 
} 
+0

Grazie, ha funzionato. Ma questi diversi comportamenti del browser fanno solo schifo -.- – Stefan

+0

Sì, sono davvero sorpreso che Firefox si attacchi ancora a Latin-1 qui. – Niko

+0

Fantastico! La funzione funziona perfettamente per me – Stefan

1

Forza la pagina per utilizzare UTF-8. Probabilmente questi codici sono dieresi codificati diversi. Uno è qualcosa come Latin1 e l'altro forse è UTF-8.

Il modo migliore per forzare utf-8 è in un meta tag nell'html.

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

Ho già provato a forzare UTF-8 inviando un'intestazione con PHP e utilizzando meta tag HTML, non ha funzionato. E non è una forma btw, solo un normale parametro get? Text = aöüß – Stefan

+0

? Text = aöüß non è codificato in url. Per codificare in javascript hai bisogno di encodeURIcomponent, per preservare la codifica. Per codificare in PHP, puoi usare rawurlencode. Non so se avrai bisogno o meno di rawurldecode se rawurldecode un articolo .. – Tei

+0

Aggiungi? Text = aöüß a una pagina in Firefox e vedrai che lo codifica automaticamente su un% F6% FC% DF – Stefan