2011-03-31 32 views
6

Estoy tratando de codificar/decodificar una url que, cuando se descodifique, devolverá los símbolos codificados + de la url. Por ejemplo, codifico website.com/index.php?eq=1+12 que, cuando está codificado, convierte el + en %2B, como debería. Cuando recupero el valor de $_REQUEST['eq'] y uso urldecode(), echo como "1 12". Parece que no puedo obtener la decodificación para traer de vuelta el + por así decirlo. ¿Estoy haciendo algo mal aquí, o hay una forma más eficiente/mejor para hacer esto? Aquí están las líneas exactas de codificación/decodificación que uso.php URL decode get '+' from URL

Enviar Página

<?php 
$eq = "1+12"; 
$send = '<a href="website.com/index.php?eq='.urlencode($eq).'</a>'; 
echo $send; 

recuperación de páginas

<?php 
$eq = urldecode($_REQUEST['eq']); 
echo $eq; 
?> 

Respuesta

11

No ejecute urldecode, los datos de $_REQUEST se decodifica automáticamente.

Un signo más, en una URL, es un espacio codificado. PHP decodifica el valor hexadecimal a + automáticamente. Luego, al ejecutar el resultado a través de urldecode, está decodificando (y de manera incorrecta) manualmente el + en un .

+0

así que eliminé el urldecode y guardé el urlencode. Todavía está registrando $ _REQUEST como un espacio. –

+0

No es así cuando copio/pegé ese código y elimino la sentencia 'urldecode'. – Quentin

+0

No estoy seguro, ¿tal vez la versión de php es diferente y funciona de manera diferente? O podrían ser otras partes de mi página conflictivas. Calculé una solución mediante el uso de str_replace ("", "+", $ eq). Probablemente no sea ideal, pero dado que mi URL nunca necesitará espacios, parece que funciona. Gracias por tu ayuda. –

9

tratar de usar la función rawurldecode() en lugar de urldecode()

1

que codificarlo en JavaScript con encodeURIComponent() y decodificarlo en PHP con rawurldecode() y se codifica/decodifica correctamente para mí, incluyendo el signo "+", pero NO con urldecode()