Foros del Web » Programando para Internet » PHP »

No puedo pasar texto que lleve retorno de carro

Estas en el tema de No puedo pasar texto que lleve retorno de carro en el foro de PHP en Foros del Web. Os comento: Desde una ventana hija , al pulsar un enlace, manda un texto a un textarea de la ventana padre . Lo hago de ...
  #1 (permalink)  
Antiguo 06/12/2006, 14:39
 
Fecha de Ingreso: noviembre-2006
Mensajes: 102
Antigüedad: 18 años
Puntos: 1
No puedo pasar texto que lleve retorno de carro

Os comento:

Desde una ventana hija, al pulsar un enlace, manda un texto a un textarea de la ventana padre. Lo hago de la siguiente manera

Código HTML:
<script type="text/javascript">
function pasadatos(texto)
{
self.opener.document.formulario.texto.value=texto;
}		
</script>
<a href='' onClick='pasatexto("<? echo $reg['coments']; ?>")'> Enlace </a><br> 
Esto, tal como está aqui, me da error cuando el texto lleva retornos de carro (no da ningun error cuando no los lleva). He probado usando nl2br() antes de insertarlo en la base de datos, pero no me funciona.

Probando para encontrar donde estaba el error, he usado lo siguiente:
Código PHP:
$texto ereg_replace("\r\n","<br />",$texto
y, efectivamente, funciona, pero en el textarea aparece el codigo <br /> (tal cual), no el retorno de carro.

Estoy aqui dandole vueltas, y no consigo encontrar una solucion

A ver si alguno me puede echar una mano.

Gracias y un saludo
  #2 (permalink)  
Antiguo 06/12/2006, 16:59
O_O
 
Fecha de Ingreso: enero-2002
Ubicación: Santiago - Chile
Mensajes: 34.417
Antigüedad: 22 años, 10 meses
Puntos: 129
Re: No puedo pasar texto que lleve retorno de carro

Te recomiendo solventar el tema con javascript .. es decir, con la función adecuada para codificar el "URL" si corresponde.

Te comento que lo hagas en javacript por qué tu pasas el dato a un elemento de un formulario de tu página pádre .. no pasa por PHP en principio ese movimiento de datos .. sino, podrías usar urlencode() (www.php.net/url_encode) aplicado al valor que obtienes de PHP:

Código PHP:
<a href='' onClick='pasatexto("<? echo urlencode($reg['coments']); ?>")'> Enlace </a><br>
Pero así .. tendrás que "decodificar" en javascript para que te quede tal cual lo generastes (sino veras los %?? de los códigos de control ..).

Un saludo,
__________________
Por motivos personales ya no puedo estar con Uds. Fue grato haber compartido todos estos años. Igualmente los seguiré leyendo.
  #3 (permalink)  
Antiguo 06/12/2006, 17:38
 
Fecha de Ingreso: noviembre-2006
Mensajes: 102
Antigüedad: 18 años
Puntos: 1
Re: No puedo pasar texto que lleve retorno de carro

Hola Cluster:

Gracias por tu ayuda, he usado urlencode() y a continuacion lo he decodificado con javascript:

texto=texto.split("+").join(" ");
texto=texto.split("%3F%0D%0A").join("\r\n");

Si bien es algo un poco chapuza, funciona correctamente. El problema es que, cuando el texto lleve un signo más (+), lo sustituira por un espacio. Supongo que algo se podrá hacer para solventarlo.

De todas maneras, me gustaria saber de donde procede el fallo, si es en el paso de php a javascript, o en el paso de javascript al textarea, o de donde sea que venga. Más que nada, por aprender (y por hacerlo menos chapuzas :P)

Gracias y un saludo
  #4 (permalink)  
Antiguo 06/12/2006, 17:46
Avatar de GatorV
$this->role('moderador');
 
Fecha de Ingreso: mayo-2006
Ubicación: /home/ams/
Mensajes: 38.567
Antigüedad: 18 años, 6 meses
Puntos: 2135
Re: No puedo pasar texto que lleve retorno de carro

Javascript tiene una funcion que se llama unescape que te sirve para eso :)
  #5 (permalink)  
Antiguo 06/12/2006, 17:47
 
Fecha de Ingreso: noviembre-2006
Mensajes: 102
Antigüedad: 18 años
Puntos: 1
Re: No puedo pasar texto que lleve retorno de carro

Hola de nuevo:

Como he comentado antes, es un poco bastante chapu.

Despues de hacer pruebas, en el momento en el que el texto lleve cualquier caracter distinto a los del abecedario, empiezan a salir cadenas del tipo %## a cascoporro (como tu bien comentabas). Funciona siempre que el texto sea simple.

Le sigo dando vueltas a esto, sigo buscando por internet, porque no entiendo donde está el fallo. No se si es que javascript no reconoce los retorno de carro, o si no lo hace el textarea.

Un saludo
  #6 (permalink)  
Antiguo 06/12/2006, 18:04
 
Fecha de Ingreso: noviembre-2006
Mensajes: 102
Antigüedad: 18 años
Puntos: 1
Re: No puedo pasar texto que lleve retorno de carro

Gracias GatorV por tu pista

Usando unescape y el urlencode() de Cluster he conseguido algo. Sigue siendo chapu, pero me ha ayudado a saber de donde puede venir el error.

De alguna manera, cuando paso el texto (que está guardado en una variable en php) como parametro a la funcion de javascript, esta no reconoce los caracteres de retorno de carro. El problema no está al pasar de javascript al textarea, ya que, usando las funciones que me recomendabais, los retornos de carro funcionaban correctamente (si bien algunos caracteres extraños seguian apareciendo)

Esto quiere decir que por algun motivo falla el paso de la variable desde php a javascript, porque este no reconoce los \r\n.

¿Por qué? Lo dudo, no tengo ni idea.

Sigo buscando... :P

Echadme una mano !! (si os queda alguna...)

Saludos !!

Última edición por jemarquesini; 06/12/2006 a las 18:06 Razón: añadir texto
  #7 (permalink)  
Antiguo 06/12/2006, 21:14
Avatar de GatorV
$this->role('moderador');
 
Fecha de Ingreso: mayo-2006
Ubicación: /home/ams/
Mensajes: 38.567
Antigüedad: 18 años, 6 meses
Puntos: 2135
Re: No puedo pasar texto que lleve retorno de carro

Usa esto desde PHP:

Código PHP:
$texto urlencodestr_replace"\n""\\n"$texto_original ) ); 
  #8 (permalink)  
Antiguo 07/12/2006, 08:39
 
Fecha de Ingreso: noviembre-2006
Mensajes: 102
Antigüedad: 18 años
Puntos: 1
Re: No puedo pasar texto que lleve retorno de carro

JAJAJAJA

QUE ESTUPIDO SOY !!!

Resulta que estoy probando la ultima solucion que me daba gatorV y cuando la pruebo, nada. Sigue sin funcionarme el chisme este.

Total, que me pongo a darle vueltas, y me acuerdo de la funcion ereg_replace, que habia probado anteriormente. La use de la siguiente manera:
Código PHP:
$texto=ereg_replace("\r\n""<br>"$texto); 
de manera que cambiaba todos los retorno de carro por <br>'s. Esto me funcionaba, pero en el textarea aparecian los <br>. TONTO DE MI de no darme cuenta de implementar una funcion javascript que me cambiara nuevamente los <br>'s por "\r\n". Y, voilá, funcionó.

Me he dado cuenta tambien de otro fallo que tenia el codigo, pero es más largo de explicar.

Y es que no se deberia programar cansado ni estresado (vamos, no se deberia hacer nada de nada en esas condiciones).

Un saludo y mil gracias a ambos.
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.
Tema Cerrado




La zona horaria es GMT -6. Ahora son las 14:09.