Foros del Web » Programando para Internet » PHP »

caracter mas (+) en parametros get

Estas en el tema de caracter mas (+) en parametros get en el foro de PHP en Foros del Web. Hay un pequeño problema que he visto en algunos servidores y no se a que se debe, consiste en que al pasar un parametro (procediente ...
  #1 (permalink)  
Antiguo 24/11/2004, 09:56
Avatar de ProgramacionWeb  
Fecha de Ingreso: junio-2003
Ubicación: Barcelona
Mensajes: 176
Antigüedad: 14 años, 6 meses
Puntos: 2
caracter mas (+) en parametros get

Hay un pequeño problema que he visto en algunos servidores y no se a que se debe, consiste en que al pasar un parametro (procediente de un formulario) por GET, al contener espacios (traducidos a +) se pierde el parametro a partir del espacio (incluido)

Mirad estos ejemplos:
[funciona] http://www.programacionweb.net/info.php?q=param+1
[no funciona] http://bitmusic.freeserverhost.com/p....php?q=param+1

EL primero funciona perfectamente, recibe todo el parametro ( $_GET["q"] ) pero el segundo ya es otro tema, pierde el parametro partir del caracter mas.

¿por que pasa esto?
¿es la configuracion de PHP?
¿puedo detectar y evitar este problema desde PHP?

Porque el problema surge de que he hecho una aplicación en PHP (un chat) y en esos servidores da problemas... como puedo hacer que el chat funcione también en esos servidores (no quiero usar POST)
__________________
Foros en los que participo:
  #2 (permalink)  
Antiguo 24/11/2004, 13:29
O_O
 
Fecha de Ingreso: enero-2002
Ubicación: Santiago - Chile
Mensajes: 34.417
Antigüedad: 15 años, 11 meses
Puntos: 126
La función urlencode() y rawurlencode() es la que genera un URL de esas características .. para "codificar" un URL de forma standard.

La primera (urlencode()) genera nu %n° para ciertos códigos como espacios (%20 creo recordar), caracteres acentuados .. etc.

La segunda (rawurlencode()) genera un + ante un espacio.

(o era al reves? .. ahora no recuerdo bien)


Todo eso lo define "legalmente" la RFC 1738 según indica el manual oficial de PHP.
http://www.faqs.org/rfcs/rfc1738

Puedes ver muchos comentarios al respecto en:
http://www.php.net/manual/en/function.rawurlencode.php
http://www.php.net/manual/en/function.urlencode.php

Hablan algo de compatibilidad y demás historias .. parece que lo que hay que usar preferentemente es rawurlencode() hoy por hoy.

Un saludo,
  #3 (permalink)  
Antiguo 24/11/2004, 13:54
Avatar de ProgramacionWeb  
Fecha de Ingreso: junio-2003
Ubicación: Barcelona
Mensajes: 176
Antigüedad: 14 años, 6 meses
Puntos: 2
No me sirve tu respuesta, los datos pasados són enviados por un formulario y no puedo codificarlos con urlencode, asimismo si intento decodificar los datos de la url con urldecode() [o rawurldecode] el resultado es igualmente insatisfactório porque los datos que se reciben también estan cortados (como puedes ver si miras el ejemplo incorrecto de phpinfo.php que he puesto en el primer mensaje), describo mas concretamente el error:

1 Se escribe un tecto en un formulario (que contiene espacios)
2 El formulario envía correctamente los datos al servidor codificandolos para url y sustituyendo los espacios por el caracter mas (simbolo +)
3 El servidor recibe la petición y ejecuta la página PHP pero esta recibe los parametros cortados por el signo + :S, no sirve nada de lo que pueda intentar aplicar a la cadena recibida porque ya ahi faltan datos...

Es una locura... alomejor indicando algún tipo de enctype en el formulario podria evitar el caracter + a favor de %20 pero no estoy seguro...
__________________
Foros en los que participo:
  #4 (permalink)  
Antiguo 24/11/2004, 14:13
O_O
 
Fecha de Ingreso: enero-2002
Ubicación: Santiago - Chile
Mensajes: 34.417
Antigüedad: 15 años, 11 meses
Puntos: 126
Y leistes las RFC's? .. y los comentarios de los usuarios de esos links que te dejé?

Prueba a forzar obligatoriamente la codificación (enctype) de tu formulario HTML:
application/x-www-form-urlencoded
multipart/form-data

http://www.w3.org/TR/html4/interact/...html#h-17.13.4

Un saludo,
  #5 (permalink)  
Antiguo 24/11/2004, 15:24
Avatar de ProgramacionWeb  
Fecha de Ingreso: junio-2003
Ubicación: Barcelona
Mensajes: 176
Antigüedad: 14 años, 6 meses
Puntos: 2
Ya habia leido con anterioridad esa informacion (la verdad me paso el dia leyendo de php.net, del consorcio y demas) , aparte la he recisado y no hay nada relacionado... parece como si fuera algún error de ese tipo de servidor.

He provado a codificar el formulario como multipart/form-data y los espacios siguen convirtiendose en + asi que el problema persiste... no se que puede estar pasando...

Por cierto el archivo que estava mal no era el que ha salido, es este:
(antes como PHPbb le añade un tracker salia bien porque cambiaba el + por %20)

http://bitmusic.freeserverhost.com/phpinfo.php?q=param+1

Mira lo que pasa con el parametro q...
__________________
Foros en los que participo:

Última edición por ProgramacionWeb; 24/11/2004 a las 15:26
  #6 (permalink)  
Antiguo 25/11/2004, 07:37
O_O
 
Fecha de Ingreso: enero-2002
Ubicación: Santiago - Chile
Mensajes: 34.417
Antigüedad: 15 años, 11 meses
Puntos: 126
Realmente .. las RFC's son claras al respecto .. Si X servidor no las cumple tal vez por configuración (descarto al cliente si usastes enctype en el formulario HTML). Tendrás que conctactar al administrador/soporte de ese servidor y ver que sucede ahí.. no te puede decir que revises la configuración de tu servidor HTTP (por qué parece que no tienes acceso) como para mirar los mime.types .. o los "Char Set" (AddDefaultCharset) ..

El caso es que todo esto si no hay intervención de PHP pues hablas de un "formulario" HTML (en el cliente) que envia X datos al serividor (HTTP) y ya observas que se "perdieron" esos datos al usar el + ... tendrás que ver solución por el lado de la configuración del servidor HTTP.

Un saludo,
  #7 (permalink)  
Antiguo 25/11/2004, 11:17
 
Fecha de Ingreso: diciembre-2003
Mensajes: 1.583
Antigüedad: 14 años
Puntos: 13
Perdon por la ignorancia (quiza es el dia jejejeje) y mi nulo ingles....

Todo esto quiere decir que para enviar valores con espacios en blanco por la url es mejor que los espacios en blanco los separe por urlencode (+) o por rawurlencode (%20)???

:_)
__________________
El conocimiento es libre: Movimiento por la Devolución
  #8 (permalink)  
Antiguo 25/11/2004, 11:42
O_O
 
Fecha de Ingreso: enero-2002
Ubicación: Santiago - Chile
Mensajes: 34.417
Antigüedad: 15 años, 11 meses
Puntos: 126
Según las RFC's que definen esa parte del protocolo HTTP .. sería el %20 (rawurlencode()).

Un saludo,
  #9 (permalink)  
Antiguo 25/11/2004, 12:42
 
Fecha de Ingreso: diciembre-2003
Mensajes: 1.583
Antigüedad: 14 años
Puntos: 13
Gracias

sigo buscando mas info al respecto, y un buen curso de ingles jejejejeje
__________________
El conocimiento es libre: Movimiento por la Devolución
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 15:32.