Red de conocimiento informático - Problemas con los teléfonos móviles - ¿Cómo se deben codificar los espacios y los signos más en las URL?

¿Cómo se deben codificar los espacios y los signos más en las URL?

Ya es de conocimiento común que los espacios no se pueden incluir explícitamente en las URL. Sin embargo, la forma en que existen los espacios no es completamente consistente en diferentes estándares, por lo que diferentes idiomas tienen reglas diferentes. lograr.

rfc2396 establece claramente que los espacios deben codificarse como %20.

Sin embargo, el estándar W3C dice que los espacios se pueden reemplazar con + o %20.

Lao Xu se confundió en el acto. Los espacios fueron reemplazados por +, y el + en sí solo se pudo codificar. Siendo ese el caso, ¿por qué no codificar los espacios directamente? Por supuesto, esto es solo una duda en la mente de Lao Xu. Ya no podemos rastrear los antecedentes anteriores y no podemos cambiar los hechos que ya sucedieron. Sin embargo, si los espacios se reemplazan con + o 20%, y si es necesario codificar + son cuestiones que debemos enfrentar ahora.

Como Gopher, lo primero en lo que debemos centrarnos es, naturalmente, en la implementación del lenguaje Go en sí, por lo que primero comprendemos las similitudes y diferencias de los tres métodos de codificación de URL comúnmente utilizados en Go.

Cuando se codifica usando url.QueryEscape, los espacios se codifican como + y el propio + se codifica como %2B.

Cuando se utiliza la codificación url.PathEscape, los espacios se codifican al 20% y + no se codifican.

Al codificar utilizando el método (Values).Encode, los espacios se codifican como +, y el propio + se codifica como %2B. Una visualización más detallada del código fuente del método (Values).Encode muestra que todavía. llama a la función url.QueryEscape internamente. La diferencia entre el método (Values).Encode y url.QueryEscape es que el primero solo codifica la clave y el valor en la consulta, mientras que el segundo codifica tanto = como &.

Para nosotros, los desarrolladores, ¿cuál de estos tres métodos de codificación deberíamos utilizar? Continúe leyendo y creo que podrá encontrar la respuesta en los siguientes artículos.

Dado que los espacios y + tienen diferentes implementaciones de codificación de URL en Go, ¿esto también existe en otros lenguajes? Tomemos PHP y JS como ejemplos.

urlencode

rawurlencode

El código urlen de PHP tiene el mismo efecto que la función url.QueryEscape de Go, mientras que rawurlencode codifica espacios y +.

encodeURI

encodeURIComponent

encodeURI de JS tiene el mismo efecto que la función url.PathEscape de Go, mientras que encodeURIComponent codifica espacios y +.

En el artículo anterior, resumimos las operaciones de codificación de + Gopher apuntando al norte mediante Go, PHP y JS. Aquí hay una tabla bidimensional que resume si la operación de decodificación correspondiente es factible.

YY e Y en la tabla anterior tienen el mismo significado. Lao Xu solo usa YY para indicar que se recomienda usar url.PathEscape para codificar en Go, y se recomienda usar rawurldecode y decodeURIComponent para decodificación en PHP y JS respectivamente.

En el proceso de desarrollo real, Gopher definitivamente tendrá escenarios que requieren decodificación. En este momento, debe comunicarse con la parte codificadora de URL para obtener el método de decodificación adecuado.

¿Existe algún método general que no requiera codificación y decodificación de URL? ¡Sin duda lo hay! Tomando la codificación base32 como ejemplo, su conjunto de caracteres de codificación es A-Z y los números 2-7. En este momento, no es necesario codificar la URL después de codificar el valor en base32.

Finalmente, espero sinceramente que este artículo pueda ser de alguna ayuda para todos los lectores.

Referencia