Foros del Web » Programando para Internet » PHP »

Recoger $_GET[]

Estas en el tema de Recoger $_GET[] en el foro de PHP en Foros del Web. Hola, Tengo una Web en utf-8 y un buscador. En el campo de texto del buscador pongo: <input type="text" name="buscar" value='<?php echo $_GET['buscar']; ?>'> Se ...
  #1 (permalink)  
Antiguo 16/07/2008, 06:01
Avatar de JoniJnm  
Fecha de Ingreso: mayo-2007
Ubicación: Madrid
Mensajes: 264
Antigüedad: 16 años, 11 meses
Puntos: 4
Pregunta Recoger $_GET[]

Hola,

Tengo una Web en utf-8 y un buscador. En el campo de texto del buscador pongo:

<input type="text" name="buscar" value='<?php echo $_GET['buscar']; ?>'>

Se entiende, no?

Bueno, pues cuando busco mediante el formulario, es decir escribiendo la palabra en el campo de texto y dando al botón "buscar", se imprime la palabra bien (sin caracteres raros), pero cuando modifico la url mediante el buscador, por ejemplo cambio:

index.php?buscar=hola

por

index.php?buscar=españa


Entonces la palabra se imprime:

espa?a (donde ? es el "letra" na reconocida, la ? que tiene fondo negro)

________________________________

También, a veces tengo que cambiar el location de la Web, por ejemplo de:

index.php?buscar=españa

a

es/index.php?buscar=españa

Entonces al poner:

<script>location='es/index.php?buscar=<?php echo $_GET['buscar']; ?>';</script>

y cargar el nuevo location, se vuelve a imprimir con la interrogación de fondo negro.



Alguien sabe si se puede solucionar?

Saludos !!
  #2 (permalink)  
Antiguo 16/07/2008, 06:38
Avatar de NUCKLEAR
Moderador radioactivo
 
Fecha de Ingreso: octubre-2005
Ubicación: Cordoba-Argentina
Mensajes: 5.688
Antigüedad: 18 años, 5 meses
Puntos: 890
Respuesta: Recoger $_GET[]

El archivo tambien tiene que estar guardado tambien en UTF-8, y el navegador tiene que soportar las url en UTF-8.
Saludos
__________________
Drupal Argentina
  #3 (permalink)  
Antiguo 16/07/2008, 06:39
Avatar de foreverOdd  
Fecha de Ingreso: noviembre-2007
Ubicación: Caracas
Mensajes: 489
Antigüedad: 16 años, 4 meses
Puntos: 14
Respuesta: Recoger $_GET[]

trata asi:
<?php echo urldecode($_GET['buscar']); ?>
__________________
My path is lit by my own fire, I only go where I desire
  #4 (permalink)  
Antiguo 16/07/2008, 07:45
Avatar de JoniJnm  
Fecha de Ingreso: mayo-2007
Ubicación: Madrid
Mensajes: 264
Antigüedad: 16 años, 11 meses
Puntos: 4
Respuesta: Recoger $_GET[]

Hola, lo he probado y sigue saliendo lo mismo.

El problema es que si cambio la url manualmente sale sin codificar en UTF-8, pero si lo hago mediante el formulario si se imprime bien, codificado

He probado a poner <?php echo utf8_encode($_GET['buscar']); ?>

Y claro, ahora cuando lo hago cambiando la url si se imprime bien, pero si lo hago con el formulario no, ya que se codifica dos veces.

Pero tiene que haber una manera, Google tiene la Web en UTF-8 y se imprime bien de todas las maneras que he probado

Gracias!
  #5 (permalink)  
Antiguo 16/07/2008, 07:51
Avatar de pateketrueke
Modernizr
 
Fecha de Ingreso: abril-2008
Ubicación: Mexihco-Tenochtitlan
Mensajes: 26.399
Antigüedad: 16 años
Puntos: 2534
Respuesta: Recoger $_GET[]

ya has intentado usar adecuadamente... UTF8 encode/decode ???

Referencias:

http://php.net/utf8_encode
http://php.net/utf8_decode
__________________
Y U NO RTFM? щ(ºдºщ)

No atiendo por MP nada que no sea personal.
  #6 (permalink)  
Antiguo 16/07/2008, 08:03
Avatar de JoniJnm  
Fecha de Ingreso: mayo-2007
Ubicación: Madrid
Mensajes: 264
Antigüedad: 16 años, 11 meses
Puntos: 4
Respuesta: Recoger $_GET[]

Pues es que no uso la función porque al buscar con el formulario ya lo envía codificado en UTF-8.
  #7 (permalink)  
Antiguo 16/07/2008, 08:23
Avatar de pateketrueke
Modernizr
 
Fecha de Ingreso: abril-2008
Ubicación: Mexihco-Tenochtitlan
Mensajes: 26.399
Antigüedad: 16 años
Puntos: 2534
Respuesta: Recoger $_GET[]

claro, estoy seguro....

pero tu mismo has dado la razón, cuando se hace por medio de FORM pasa bien... pero como la URL que escribes en la barra de direcciones es pasada directamente.... puede perder o distorsionar esta codificación....

quizá, no uses estas funciones... pero de nuevo, ¿lo has intentado? (veo que si)

en lo personal, cuando trabajo con utf8 hay ciertas veces donde debes usar alguna de estas funciones... a pesar, de enviar los headers y meta correspondientes, así como escribir en archivos codificados con utf8 (y ni hablar de la BD, utf8)
__________________
Y U NO RTFM? щ(ºдºщ)

No atiendo por MP nada que no sea personal.
  #8 (permalink)  
Antiguo 16/07/2008, 08:51
Avatar de JoniJnm  
Fecha de Ingreso: mayo-2007
Ubicación: Madrid
Mensajes: 264
Antigüedad: 16 años, 11 meses
Puntos: 4
Respuesta: Recoger $_GET[]

En la BD va bien, al enviar una variable se hace codificada, osea que lo recojo normal.

He probado a codificar, se imprime mal cuando se envía por form (doble codificación) y bien cuando se cambia la url (única codificación)

También utf8_encode(utf8_decode($_GET['b']));
Y en vez de salir la interrogación de fondo negro, sale la interrogación normal cuando se cambia la url (por form bien).

La única manera que se me ocurre es volver a ISO, qué hará google
  #9 (permalink)  
Antiguo 16/07/2008, 09:00
Avatar de JoniJnm  
Fecha de Ingreso: mayo-2007
Ubicación: Madrid
Mensajes: 264
Antigüedad: 16 años, 11 meses
Puntos: 4
Respuesta: Recoger $_GET[]

Ya lo solucioné!

Código PHP:
$b $_GET['b']
$b2 str_replace("?","",$b); //quito las interrogaciones de $b
$b2 utf8_encode(utf8_decode($b2)); 
//lo decodifico y codifico para cambiar la interrogación de fondo negro por la normal

if (strpos($b2"?") !== false) { $b utf8_encode($b); }
//si hay una interroación después de codificar es que se ha cambiado la url, la variable no está codificada, así que hazlo 
O más simple:

Código PHP:
$b =  $_GET['b']
if (
strpos(utf8_encode(utf8_decode(str_replace("?","",$b))), "?") !== false) { $b utf8_encode($b); } 

Última edición por JoniJnm; 16/07/2008 a las 09:10
Atención: Estás leyendo un tema que no tiene actividad desde hace más de 6 MESES, te recomendamos abrir un Nuevo tema en lugar de responder al actual.
Respuesta




La zona horaria es GMT -6. Ahora son las 04:00.