048_get problemas con la url de codificación

En primer lugar, el origen del problema

  Problema: Cuando se incluye en la url y, +, y otros caracteres especiales% (principalmente cuando el paso de parámetros, el parámetro contiene el contenido de estos caracteres), la dirección no es válida. Por ejemplo http://10.190.0.0:108/doc/test+desc2.bmp, si + / y otros caracteres especiales aparecen en el nombre del archivo, el fondo será reportado errores 404, es decir, el servidor web no pueda localizar la página o recurso.

        -------------------------------------------------- -------------------------------------------------- -------------------------------------------------- -------------------------------------------------- ----------------------

        URL es la dirección URL, siempre y cuando la Internet, que serán utilizados.

  En general, las URL sólo letras, números arábigos y algunos puntuacion no pueden utilizar otros caracteres y símbolos. Por ejemplo, están las cartas de la URL "http://www.abc.com" en el mundo, pero no URL alfabeto griego "http: //www.aβγ.com" (se pronuncia Alfa - Beta - Gamma .com) . Esto es debido a que el estándar RFC 1738 de la red obligatoria:

  " ... Sólo caracteres alfanuméricos [0-9a-zA-Z], los caracteres especiales "$ -_ + * '(),"[sin incluir las comillas - ed].!, Y los caracteres reservados utilizados para sus fines reservada podrán ser utilizado sin codificar en una URL ".

  "Sólo letras y números [0-9a-zA-Z], algunos de los caracteres especiales" $ -_. +! * '(), "[Sin comillas], y algunas palabras reservadas, que no pueden ser codificados directamente para la dirección URL ".

  Esto significa que si hay caracteres en la URL, debe ser codificada después de su uso. Pero el problema es, RFC 1738 no prevé método de codificación específico, sino a la aplicación (navegador) para decidir. Este resultado en "URL codificada" se ha convertido en una zona confusa.

        Cuando se utiliza el paso de parámetros URL, a menudo pasan algún nombre chino (o caracteres especiales) parámetro o dirección URL, se produjo el error durante el procesamiento de la conversión en el fondo. Estos símbolos especiales no se pueden pasar directamente en la URL, si quieres pasar estos caracteres especiales en una dirección URL, a continuación, que usarían su codificación. Formato de codificación es:% más el valor ASCII, es decir, un signo de porcentaje%, seguido por el valor de código correspondiente de caracteres ASCII (hexadecimal). Espacios como la codificación de valor es "20%". La siguiente tabla muestra algunos caracteres especiales y codificación URL.

 

No. Los caracteres especiales significado valor hexadecimal
1. + Signo + indica un espacio en el URL % 2B
2. en blanco URL número espacios o puede ser codificada + % 20
3. / directorios y subdirectorios separados % 2F
4. ? Y separar los parámetros de URL reales % 3F
5. % caracteres especiales designados 25%
6. # marcador expresado 23%
7. y Entre especificada en el separador de parámetro URL % 26
8. = El valor del parámetro especificado en la URL % 3D

 

  Vamos a echar un vistazo, "URL codificada" en el final la cantidad de confusión. a su vez, voy a analizar cuatro situaciones diferentes, en cada caso, los métodos de codificación de URL no son el mismo navegador. Después de que explican la diferencia, digo cómo encontrar un método de codificación unificada usando Javascript.

En segundo lugar, el caso 1: Carácter que comprende ruta URL

  IE abierta (yo uso la versión 8.0), introduzca la dirección URL "http://zh.wikipedia.org/wiki/ Fiesta de la Primavera". Tenga en cuenta que la "Fiesta de la Primavera" es la palabra en este momento es parte de la ruta URL.

  Ver la información del encabezado de solicitud HTTP, IE encontrar la URL de la consulta real es "http://zh.wikipedia.org/wiki/%E6%98%A5%E8%8A%82". Es decir, IE automáticamente "Festival de Primavera" codificado como "% E6% 98% A5% E8% 8A% 82".

  Sabemos, "Primavera" y "Día" codificación UTF-8 son "E6 98 A5" y "E8 8A 82", por lo tanto, "% E6% 98% A5% E8% 8A% 82" es el orden en el antes de cada byte se obtiene por%.

  En la prueba de Firefox, nos dieron el mismo resultado. Por lo tanto, la conclusión es 1, la ruta URL codificada, utilizando una codificación UTF-8.

En tercer lugar, el Caso 2: La cadena de consulta contiene caracteres chinos

  Introducir URL "http://www.baidu.com/s?wd= Fiesta de la Primavera" en el IE. Tenga en cuenta que la "Fiesta de la Primavera" es la palabra en este momento pertenece a la cadena de consulta, no una ruta URL, que no debe confundirse con el caso 1.

  Ver la información del encabezado de solicitud HTTP, IE se encuentra el "Festival de Primavera" transformado en un ilegible.

Cambie al modo hexadecimal, con el fin de ver con claridad, "Fiesta de la Primavera" se convirtió en "B4 BA BD DA".

  Sabemos que, "Primavera" y "festival" de codificación GB2312 (codificación por defecto mi sistema operativo "Windows XP" versión china) son "BA B4" y "BD DA". Por lo tanto, IE cadena hecho de consulta, enviado a GB2312 formato de codificación. 

  El tratamiento de Firefox, es un poco diferente. Cabeza HTTP que envía es "wd =% B4% BA% BD% DA". Es decir, la misma codificación GB2312, pero agregó antes de cada byte%.

  Por lo tanto, la conclusión es 2, cadena de consulta codificada, utilice la codificación por defecto del sistema operativo.

En cuarto lugar, el caso de 3: Obtener URL método comprende personajes generados

  He dicho antes que la situación entre directamente en la URL, pero más a menudo el caso de que, en la página web abierta, una solicitud HTTP directamente con el método GET o Post.

  De acuerdo con Taiwán Chung Hsing Universidad prueba de Lvrui Lin maestro , cuando el método de codificación es determinada por la codificación de la página, que está determinada por el ajuste en el código HTML código de juego de caracteres.

  <Meta http-equiv = "Content-Type" content = "text / html; charset = xxxx">

  Si la última línea por encima de juego de caracteres es UTF-8, la URL a codificación UTF-8, y si es GB2312, GB2312 URL Tome codificación. 

  Por ejemplo, una codificación Baidu GB2312, el Google es una codificación UTF-8. Por lo tanto, desde la búsqueda de ellos en el cuadro de búsqueda con la palabra "Fiesta de la Primavera", la cadena de consulta resultante no es la misma. 

  Baidu de construcción es% B4% BA% BD% DA, que es GB2312 codificación.

  Google se genera% E6% 98% A5% E8% 8A% 82, que es una codificación UTF-8.

  Por lo tanto, la conclusión es 3, métodos GET y POST de codificación, es una páginas codificados.

En quinto lugar, el caso de 4: Ajax llamada URL contiene caracteres chinos

  Los tres primeros casos son peticiones HTTP emitidas por el navegador, el último caso es el Javascript genera una petición HTTP, que es una llamada Ajax. De acuerdo con el maestro Lv Ruilin o artículo, en este caso, el IE y Firefox enfoque completamente diferente.

  Por ejemplo, hay dos de tales líneas de código:

  URL = url + + document.myform.elements [0] .value "q =?"; // valores enviados por el usuario en la forma de un "Festival de Primavera" asumir es la palabra

  http_request.open ( 'GET', url, true);

  Por lo tanto, no importa lo que el conjunto de caracteres, IE transmite al servidor es siempre la página "q =% B4% BA% BD% DA" usando Firefox y transmitida al servidor siempre es "q =% E6% 98% A5% E8% 8A 82% ". En otras palabras, en la llamada Ajax, IE siempre codificado en GB2312 (codificación por defecto del sistema operativo), pero Firefox siempre utiliza codificación UTF-8. Esta es nuestra conclusión 4.

Seis, la función Javascript: Escape ()

  Bueno, hasta ahora, dijeron cuatro casos y hecho.

  Suponga que tiene leer la parte delantera, a continuación, el tiempo que debe sentir un dolor de cabeza. Debido a que es demasiado confuso. Los diferentes sistemas operativos, navegadores diferentes, diferentes páginas juego de caracteres dará lugar a un resultado completamente diferentes de codificación. Si los programadores quieren cada resultado se tienen en cuenta, no es tan horrible? No hay manera de garantizar que los clientes sólo utilizan un método de codificación de petición al servidor?

  La respuesta es sí, es el primero en utilizar Javascript codificación URL, a continuación, enviar al servidor, no se dé la oportunidad de intervenir navegador. Javascript porque la salida es siempre el mismo, por lo que nos aseguramos de que los datos que el servidor tiene un formato unificado.

  funciones del lenguaje Javascript para la codificación, un total de tres, el más antiguo es el escape (). Aunque esta función ahora es obsoleto, pero debido a razones históricas, muchos lugares siguen utilizando, es necesario comenzar con ella hablar.

  De hecho, el escape () no se puede utilizar directamente para la codificación URL, su verdadera función es devolver el valor de una codificación de caracteres Unicode. Tales como "Fiesta de la Primavera", el resultado devuelto es% u6625% u8282, que se concentra en el carácter Unicode, "Primavera" es el primer 6625 (hexadecimal) carácter, "Día" es el primer 8282 caracteres (hexadecimales) .

  Sus normas específicas, además de letras ASCII, números, signos de puntuación "@ * _ + -. /" A excepción de se codifican todos los demás personajes. En \ u0000 a \ símbolo se transfiere entre u00ff% xx de la forma, los símbolos restantes se convierten a forma% uxxxx. Correspondiente función de decodificación es unescape ().

  Por lo tanto, "Hello World" de la fuga () de codificación es "Hola% 20World". Dado que el espacio es el valor Unicode 20 (hexadecimal).

  Hay dos áreas que necesitan atención.

  En primer lugar, no importa lo que se codifica la página original, una vez código Javascript, todos los caracteres Unicode se convierten. En otras palabras, la función de entrada y de salida Javascipt, el valor predeterminado es de caracteres Unicode. Esto también se aplica a las dos funciones siguientes.

  En segundo lugar, escape () no código "+". Pero sabemos que la página cuando se envía el formulario, y si hay espacio, que se convertirán en el carácter +. Cuando los datos de procesamiento del servidor, procesa en un número de espacios voluntad +. Por lo tanto, tener cuidado al usar.

función de siete, Javascript: encodeURI ()

  encodeURI () es la función javascript en lo real con codificación URL.

  Se ve en la dirección URL codificada, por lo que además del símbolo común para algunos otros símbolos que tienen un significado especial en la URL "; / ?: @ & = + $, #," no está codificado. Después de la codificación, los símbolos de salida que forma UTF-8, y añade% antes de cada byte.

  Es la función correspondiente decodificación decodeURI ().

  Tenga en cuenta que no codifica comillas simples.

Ocho, la función Javascript: encodeURIComponent ()

  La última función es un Javascript codificación encodeURIComponent (). La diferencia entre el encodeURI () es, por su parte de la URL codificada de forma individual, y no para toda la URL codificada.

  Por lo tanto, el "; / ?: @ & = + $, #," Estos no son símbolos codificados en encodeURI (), el encodeURIComponent () está codificado en absoluto. Como para el método específico de codificación, los dos son lo mismo.

  Es la función correspondiente decodificación decodeURIComponent ().

 

fuente original: https://blog.csdn.net/chenlycly/article/details/51820727?depth_1-utm_source=distribute.pc_relevant.none-task&utm_source=distribute.pc_relevant.none-task

Supongo que te gusta

Origin www.cnblogs.com/pogusanqian/p/12511247.html
Recomendado
Clasificación