php - pasar - ¿Qué hay de malo en poner espacios en las variables $_GET
php variables (4)
El problema no son los espacios, sino el símbolo.
Use %26
lugar, así:
index.php?category=IT%20%26%20Soft
El signo & indica que está comenzando otro campo (como category=IT&subcategory=somethingelse
). Puede ver una lista de caracteres reservados en Wikipedia .
Si, por ejemplo, mi url tiene el aspecto de index.php? Category = IT% 20 &% 20Soft. Luego intento imprimir "$ _GET [categoría]" solo obtengo "IT" y no "IT & Soft". ¿Que esta mal aquí? Me está frustrando.
La cadena de consulta usa el carácter &
como un delimitador para separar los parámetros. Básicamente, vas a necesitar escapar de %26
.
index.php?category=IT%20%26%20Soft
Los espacios y símbolos (&) no son válidos y deben codificarse para su uso en valores de parámetros. Ejecute sus argumentos a través de ''urlencode'' para crear valores de parámetros url safe.
&
es un carácter reservado en HTTP URL y URI (comúnmente conocido como enlace o referencia de hipertexto). Este &
es exactamente ese punto que definirá una nueva entrada $_GET
. Entonces ya no forma parte de la entrada $_GET
anterior. El anterior es el que te gustaría usar. Entonces, de hecho, el &
dentro de la categoría es la causa de tus dolores de cabeza:
URL: http://example.com/script.php?hello=world&foo=bar
^ ^^^
PHP:
$_GET[''hello''] // "world"
$_GET[''foo''] // "bar"
Solo para recordar: en una URL, el carácter &
separa un parámetro de URL del otro.
Pero esto no significa que su problema no sea solvente. Puede pasar valores que contienen el carácter &
través de un parámetro de URL. Hay una manera muy simple de obtener &
caracteres en un valor $_GET
específico.
Valores de empaque para un viaje de ida y vuelta por Internet
Pero tenga cuidado: podría mirar ahora en el nivel de entrada (que es la parte donde los datos entran $_GET
y otras variables) de su aplicación. Pero para resolver esto, necesitas mirar lo opuesto: el nivel de salida (ahí es donde envías HTML).
¿Por qué? Porque la salida se convertirá en la entrada de tu script. Entonces, si la salida ya está mal, la entrada nunca estará lista para su uso.
Tenga en cuenta que cada URL que su aplicación envía al navegador (por ejemplo, como parte de un enlace HTML <a href="">
) es un nuevo comando con sus parámetros específicos para las variables $_GET
su script. Técnicamente, esta parte se conoce como la query
o como la parte queryinfo
de un URI / URL HTTP.
Entonces, si la URL ya está construida de manera que creará los parámetros $_GET
incorrectos para su secuencia de comandos, ya es demasiado tarde. Entonces, eche un vistazo a la salida para corregir la causa de origen.
Por lo tanto, en su lugar, debe buscar en el lugar donde crea la URL y hacer la salida correcta allí para obtener $_GET[''category'']
más adelante.
En cada lugar de salida de enlace, debe asegurarse de que cada valor esté codificado correctamente. Esa es la palabra mágica que contiene la solución a su problema. Un término que es mejor consultar en un diccionario que en una documentación técnica.
El tipo de codificación para los valores necesarios para $_GET
parámetros $_GET
es la llamada codificación URL , codificación para URL, tiene sentido, ¿no? URL, codificación = codificación URL.
La codificación de los valores para las URL realmente cuida que el valor del parámetro esté disponible de nuevo en su secuencia de comandos de manera segura, a diferencia de separar los valores de separación y, al final, destruir técnicamente la URL.
Suena probablemente un poco complicado, pero la buena noticia es que, antes que nada, solo necesitas saber que PHP como lenguaje de scripting web ofrece una función que hace esta codificación por ti. Se llama urlencode()
y puede usarlo en cualquier valor para crear sus URL. De hecho, es una tarea bastante común en una aplicación web, por lo que si solo supieras antes, pero hasta entonces, veamos algún código, ¿verdad?
Codificación de parámetros de URL con PHP
Debo adivinar cómo se ve eso al final, pero también puedes agregar tu código a tu pregunta (el código de salida) para que sea más fácil darte un código que puedas usar "solo". Supongamos que tiene algo similar a esto para generar un enlace:
<a href="index.php?category=<?php echo $category ?>">
Esto mostraría los contenidos de $category
tal como están . Pero esto lleva a URL incorrectas que romperán tu script.
Entonces, en cambio, el valor de $category
necesita ser codificado. Es como ponerlo en un sobre para asegurar que llegue a su destino como un todo. Hagamos esto usando la función urlencode
que acabo de mencionar:
<a href="index.php?category=<?php echo urlencode($category) ?>">
Como puede ver, simplemente poniendo el valor en la función urlencode
se encarga de que los datos estén codificados correctamente. Listo para llegar a su destino, nada puede romperlo más.
Como siempre: es simple cuando sabes cómo. Las URL deben escribirse correctamente y, especialmente, los valores de los parámetros deben codificarse adecuadamente para evitar problemas en el extremo opuesto: el nivel de entrada.
Buena suerte con tu término.