2012-09-25 27 views
7

Siempre puedo probar esto, pero quería una respuesta oficial de un experto en PHP (algo que ciertamente no soy).Solicitudes PHP con múltiples cadenas de consulta

Si alguien hace una petición como esta:

http://www.somedomain.com/a.php?param1=value1&param2=value2&param3=value3?param1=value4&param2=value5&param3=value6 

¿Qué tipo de consecuencias están ahí cuando intento acceder a la _GET['param2'], por ejemplo? Parece que acabo de obtener el primer valor. En este caso, devolvería value2. ¿Es ese comportamiento esperado?

¿El segundo signo de interrogación afecta a algo? ¿Habrá errores, por ejemplo?

+0

No estoy seguro pero podría causar un error de análisis. El analizador podría esperar el token '&' después de 'value2' pero encontró '?', Por lo que simplemente dejó de analizar la solicitud. –

+0

Pregunta relevante: [Posición autorizada de las claves de consulta HTTP GET duplicadas] (http://stackoverflow.com/questions/1746507/authoritative-position-of-duplicate-http-get-query-keys) – Wiseguy

+0

puede usar múltiples separadores en arg_separator –

Respuesta

3

Acaba de definir el último. Definir un parámetro más de una vez en la cadena de consulta solo corre el riesgo de obtener resultados potencialmente confusos. Lo mejor es validar su cadena de consulta en estas instancias, al menos eso es lo que I hacer.

El segundo signo de interrogación se tratará como parte del valor para su parámetro anterior.

2

Se supone que oficialmente no tiene dos ? en una cadena de consulta. Si lo haces, los resultados no están definidos. Algunas plataformas (como PHP) tratarán los caracteres posteriores ? de la misma manera que los caracteres &, y permitirán esos valores/pares. Otros simplemente tratarán el valor de param3 como value3?param1=value4.

Respuesta corta: no hagas esto. Se pone raro. Y, como autor del servidor, uno siempre debe estar validando los valores de los parámetros cuidadosamente para asegurarse de que los valores tengan sentido.

Cuestiones relacionadas