2012-04-02 10 views
6

Chrome convierte esta: aöüß a %C3%A4%C3%B6%C3%BC%C3%9F Pero Firefox lo convierte a esta extraña cosa aquí: a%F6%FC%DF Me parece que no puede encontrar una manera de convertir la cosa Firefox nuevo a la original en PHP . Urldecode y rawurldecode lamentablemente no funcionan. ¿Alguien sabe cómo lidiar con eso? Gracias.Diferencia Firefox - Chrome cuando se codifica diéresis

Respuesta

5

Como ya se supuso Tei: Chrome está utilizando UTF-8 (como probablemente recomendado) para los parámetros de URL mientras que Firefox utiliza Latin-1. No creo que puedas controlar este comportamiento. Además, será difícil de manejar, ya que es necesario adivinar la codificación que se utilizó.

Esta es la forma en las obras de descodificación (depende del explorador, asumiendo que está usando UTF-8 en su aplicación):

Chrome:

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

Firefox:

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

Esto puede ser una solución que funciona en la mayoría de los casos:

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

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

    return $decoded; 
} 
+0

Gracias, funcionó. Pero estos diferentes comportamientos de navegador simplemente apestan -.- – Stefan

+0

Sí, estoy realmente sorprendido de que Firefox aún se quede con Latin-1 aquí. – Niko

+0

¡Impresionante! La función funciona sin problemas para mí – Stefan

1

Fuerce su página para usar UTF-8. Probablemente estos códigos son diéresis codificados diferentes. Uno es algo así como Latin1, y el otro quizás sea UTF-8.

La mejor manera de forzar utf-8 es en una metaetiqueta en el html.

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

Ya intenté forzar a UTF-8 enviando un Encabezado con PHP y usando metaetiquetas html, nada funcionó. ¿Y no es una forma por cierto, solo un parámetro get normal? Text = aöüß – Stefan

+0

? Text = aöüß no está urlencoded. Para codificar en JavaScript necesita encodeURIcomponent, para preservar la codificación. Para codificar en PHP, puedes usar rawurlencode. No sé si necesitarás o no código de descifrado crudo si descifras un elemento. – Tei

+0

Añade texto a una página en Firefox y verás que lo codifica automáticamente en% F6% FC% DF – Stefan

Cuestiones relacionadas