Me encontré con un problema hoy en el que estaba pasando una clave con el valor establecido en una matriz vacía a http_build_query()
. Ej .:http_build_query ignora la clave si el valor es una matriz vacía. ¿Cómo es esto no es un error?
$args = array("foo", "bar", array(), "baz");
$qs = http_build_query($args);
echo $qs; // outputs 0=foo&1=bar&3=baz, I expected 0=foo&1=bar&2=&3=baz
Esto presenta un problema para mí, ya que estoy pasando algunos datos a una API interna a través de HTTP y tengo que tirar de todos los argumentos a cabo en el otro lado.
Bueno, busqué en Google esto y se me ocurrió el siguiente informe de error: http://bugs.php.net/bug.php?id=50407. La breve respuesta de un administrador es: "No establecer es lo mismo que configurarlo vacío. No hay errores".
¿Alguien puede explicarme por qué esto no es un error? ¿Alguien tiene alguna idea para una solución, aparte del truco de establecer un valor arbitrario en un lado e interpretar ese valor como un valor vacío en el otro?
EDITAR
Aquí es por lo que creo que es un error:
$args = array("foo", "bar", array(), "baz");
$qs = http_build_query($args);
parse_str($qs, $query);
echo ($args == $query); // false, I expect it to be true
supongo que tal vez sea ingenuo de mi parte a considerar parse_str()
y http_build_query()
a ser inversos el uno del otro.
Estoy publicando mi solución actual de "lame hack" como respuesta a continuación.
Entonces, ¿vas a decir que tu API confiará ciegamente en que los datos provienen de HTTP sin validación? Suena interesante ... –
no parece que diga nada en absoluto sobre lo que sucederá con los datos dentro de la API. – Johrn
@Col. Shrapnel: Eso es todo un salto. Solo quiere poder pasar una variable con un valor vacío. – webbiedave