the recommended php_intl instalar highly extension enable and php apache configuration internationalization

php - recommended - apache: diéresis escapadas en cadena de consulta(URL) llevan a 403



php intl (1)

Tengo un problema que nunca he encontrado antes, y creo que tiene algo que ver con la configuración de Apache, que no conozco muy bien.

primero, hay un script php con un formulario de búsqueda. la forma se transmite a través de POST.

luego está la lista de resultados de resultados de búsqueda. aquí la consulta de búsqueda original se pasa como parte de la url, por ejemplo: search.php? id = 1234 & query = foo. esto también funciona, siempre y cuando no haya diéresis (äöüÄÜÜß ...) caracteres transmitidos.

tan pronto como incluya diéresis en la consulta de búsqueda, la primera parte que transmite la cadena de consulta como POST funciona, pero al pasarla (urlencoded) en la URL se obtiene un 403.

asi que:

  • search.php?id=1234&query=bar funciona
  • search.php?id=1234&query=b%E4r lleva a 403 (% E4 = "ä" utf-8 urlencoded)
  • search.php?id=1234&query=b%C3%A4r conduce a 403 (% C3% A4 = "ä" utf-8 urlencoded)
  • enviar umlauts a través de trabajos POST

convertí la aplicación de iso-8859-1 a utf-8, pero eso no hizo ninguna diferencia.

También lo probé en mi máquina local, aquí funciona perfectamente, como se esperaba.

configuración remota del servidor (donde no funciona):

Apache / 2.2.12 (Ubuntu),
Versión PHP 5.2.10-2ubuntu6.7, Suhosin Patch 0.9.7, a través de CGI / FastCGI

configuración local (aquí los mismos trabajos):

Apache / 2.2.8 (Win32) PHP / 5.3.5
Versión de PHP 5.3.5 vía mod_php

¿Alguien tiene una idea de por qué el apache remoto / php-cgi no acepta umlauts urlencoded correctamente en la url?

información adicional: también intenté crear un archivo estático con una diéresis en su nombre, y ambos /t%C3%A4st.php y /täst.php se /täst.php sin problemas. täst.php?foo=täst falla.

nota ?foo=%28 , donde% 28 es "(", también funciona.


Apache no escapa eso, el navegador lo hace.

Debe usar urlencode y urldecode para evitar problemas con ese tipo de caracteres.

Algunos navegadores, como el antiguo Netscape, simplemente envían la URL tal como está escrita, con caracteres de 8 bits. Otros, especialmente MSIE, codifica la url como UTF-8 antes de enviarla al servidor web, por lo que un personaje de 8 bits llega como dos caracteres, de los cuales el primero tiene el octavo bit establecido. No hay indicación alguna, en los encabezados de solicitud o en otro lugar, de que la url esté codificada en UTF-8.