Codificación de URL para PHP

Estoy tratando de enviar una solicitud de URL simple a un servidor con XML con algo similar a

xmlhttp.open("GET","serverFile.php?q="+str,true);
xmlhttp.send();

Tengo tres variables contenidas en el archivo javascript, es decir:

var userName = Steve;
var findtype = Green Holder;
var findcategory = B Provincial;

Estaba tratando de "empaquetar" las cuerdas juntas en algo

var combinedString = "find&userName=" + userName + "&type=" + findType + "&category=" + findCategory;

y luego llamando a la función de arriba

xmlhttp.open("GET","serverFile.php?q="+combinedString,true);

pero estoy confundido sobre cómo decodificar esto en el lado del servidor o si esto funcionaría. Originalmente estaba pensando en tener una declaración if:

$q=$_GET["q"];
if ($q == "find")
{
    $name=$_GET["userName"];
    $type=$_GET["type"];
    $category=$_GET["category"];
    ...do other coding here to get data
}

Pero soy muy nuevo en PHP, así que no tengo idea si este es el enfoque correcto. Estaba tratando de averiguar la codificación de URL adecuada en línea, pero ¿la cadena combinada está en la forma adecuada? ¿Dividiría el "&" apropiadamente el contenido o necesitaría & y ¿necesitaría colocar un signo más entre espacios o lo haría solo? ¡Cualquier información sería de gran ayuda!

preguntado el 09 de marzo de 12 a las 17:03

1 Respuestas

Debe codificar sus componentes de URL en JavaScript antes de usar la concatenación de cadenas.

combinedString = ... + encodeURIComponent(userName) + ... + encodeURIComponent(findType) + ...

PHP se llenará automáticamente $_GET con los valores decodificados de URL, por lo que si tuviera que pasar:

?foo=%2F%40%23%24

PHP decodificaría automáticamente $_GET['foo'] A igual "/@#$"


En cuanto a tu & comentario, solo necesita escapar de XML cuando está usando el valor en XML (o HTML en este caso, que es cercano pero no del todo idéntico).

Si simplemente está escribiendo en la barra de ubicación del navegador, usaría:

somepage.php?foo=bar&fizz=buzz

Pero si estuvieras marcando esto en un elemento ancla (<a>) usarías:

<a href="somepage.php?foo=bar&amp;fizz=buzz">lorem ipsum</a>

respondido 09 mar '12, 17:03

No es la respuesta que estás buscando? Examinar otras preguntas etiquetadas or haz tu propia pregunta.