Foros del Web » Programando para Internet » PHP »

Función nl2br()

Estas en el tema de Función nl2br() en el foro de PHP en Foros del Web. Hola, mi problema es el siguiente: En una tabla muestro registros de la base de datos. Con la función nl2br() consigo que el texto se ...
  #1 (permalink)  
Antiguo 26/11/2007, 06:21
 
Fecha de Ingreso: julio-2007
Mensajes: 50
Antigüedad: 16 años, 8 meses
Puntos: 0
Función nl2br()

Hola, mi problema es el siguiente:

En una tabla muestro registros de la base de datos. Con la función nl2br() consigo que el texto se muestre igual que está en la bd (puntos y aparte, tabulaciones,...). El problema viene cuando guardo los campos del registro en variables de servidor ($_SERVER[PHP_SELF]?descripcion=...). No se mantiene el mismo formato que en la bd. Las variables de servidor las muestro en campos/areas de texto de la siguiente forma:

Código PHP:
<input type="text" name=descripcion"  value=" print $descripcion" /> 
Mostrando los registros directamente sobre una tabla, la función nl2br() funciona correctamente pero guardando en variables para mostrar posteriormente no funciona. Alguna idea?

Saludos
  #2 (permalink)  
Antiguo 26/11/2007, 06:42
Avatar de jerkan  
Fecha de Ingreso: septiembre-2005
Mensajes: 1.607
Antigüedad: 18 años, 7 meses
Puntos: 19
Re: Función nl2br()

¿Por qué quieres que se mantenga el 'formato' en la base de datos si ya se muestra como tú quieres?
  #3 (permalink)  
Antiguo 26/11/2007, 06:57
 
Fecha de Ingreso: julio-2007
Mensajes: 50
Antigüedad: 16 años, 8 meses
Puntos: 0
Re: Función nl2br()

En la página tengo una tabla que muestra en resumen los registros y unos campos/areas de texto que detallan lo que contiene cada registro. Cuando pincho sobre una linea de la tabla se desglosa el registro sobre los campos de texto. Esto lo hago guardando el registro en variables de servidor, pasando por la url recogo los valores en los campos de texto correspondientes (todo esto se hace en la misma página). La información de la url es aproximadamente así:

"http://localhost/responsable.php?referencia=200711261015062&fecha_i nicio=26/11/2007&prioridad=Media&descripcion=Prueba%20del%20pu nto%20y%20aparte.punto%20y%20seguido.%20otro%20pun to%20y%20aparte.funciona"

Como puedes observar, en $descripcion se guarda el contenido que quiero pero no el formato. Después de Prueba%20del%20punto%20y%20aparte. no hay ningún comando del tipo %20 o algo así que de formato a la cadena. Cuando hago echo nl2br($descripcion); tampoco lo muestra bien. El resultado que debería mostrar es este:

Código HTML:
Prueba del punto y aparte.

punto y seguido. otro punto y aparte.

funciona
Pero lo que muestra es esto:

Código HTML:
Prueba del punto y aparte.punto y seguido. otro punto y aparte.funciona?
Me explico? Salu2
  #4 (permalink)  
Antiguo 26/11/2007, 07:18
Avatar de jerkan  
Fecha de Ingreso: septiembre-2005
Mensajes: 1.607
Antigüedad: 18 años, 7 meses
Puntos: 19
Re: Función nl2br()

Mmm, quizás te funcionaría con las funciones url_encode / url_decode.
  #5 (permalink)  
Antiguo 26/11/2007, 07:30
 
Fecha de Ingreso: julio-2007
Mensajes: 50
Antigüedad: 16 años, 8 meses
Puntos: 0
Re: Función nl2br()

Ese no es el problema porque la cadena no está codificada, así que no tenemos que aplicarle url_decode(). Creo que el problema está cuando hago $descripcion=$_GET['descripcion']. Creo que esta asignación es la que provoca el problema. Voy a seguir investigando.

EDITO:

He probado $descripcion=nl2br($_GET['descripcion']); pero tampoco funciona
  #6 (permalink)  
Antiguo 26/11/2007, 08:53
Avatar de GatorV
$this->role('moderador');
 
Fecha de Ingreso: mayo-2006
Ubicación: /home/ams/
Mensajes: 38.567
Antigüedad: 17 años, 10 meses
Puntos: 2135
Re: Función nl2br()

Tu problema es que no deberías de pasar por GET estos valores, deberías de solamente pasar el ID, y posteriormente en la otra pagina recoger los datos, o en dado caso pasarlos por POST, ya que es una limitación de el protocolo HTTP, si vas a enviar saltos de linea necesitan estar codificados ya que la linea GET debe de ir en una sola linea:

Código:
GET /path/script.php?urlencoded=form HTTP/1.1
La única forma de codificar un salto de linea es pasándolo por POST, o aplicando una función javascript antes del envío para que se codifique el valor y pueda ser enviado por GET.

Saludos.
  #7 (permalink)  
Antiguo 27/11/2007, 04:04
 
Fecha de Ingreso: julio-2007
Mensajes: 50
Antigüedad: 16 años, 8 meses
Puntos: 0
Re: Función nl2br()

Al final lo conseguí con SQL:

Código PHP:
"SELECT * FROM orden_trabajo WHERE referencia=".$_GET['referencia']; 
De esta forma el texto ya me sale formateado porque lo extraigo directamente de la bd. Trabajar con las variables del servidor se me antojaba complicado.

Gracias por vuestras ideas.
  #8 (permalink)  
Antiguo 27/11/2007, 07:38
Avatar de eddwinpaz  
Fecha de Ingreso: noviembre-2007
Ubicación: Merida , Venezuela
Mensajes: 1.066
Antigüedad: 16 años, 5 meses
Puntos: 25
Re: Función nl2br()

Oye Te recomiendo que pases ese texto Via $_POST y no por $_GET estas son tecnicas mas seguras y asi te evitas eso de URL encode y Decode. Primero Windows linux y mac tienen diferentes tipos de encodificacion para Cada salto de linea entonces debes hacerle un parse con str_replace. repito si quieres formatearlo antes de mandarlo a la base de datos seria de la siguiente manera.

NOTA IMPORTANTE!
No es eficiente hacer una consulta tan grande, Por que lo digo te estarás imaginando ? Bueno si comparas un texto que pese 64k contra una simple ID enumerador el cual identifique ese texto es mucho mejor ;) ejemplo

MANERA Eficiente
SELECT id, titulo, contenido, imagen FROM super_tabla WHERE id='5'

INeficiente!
SELECT * FROM super_tabla WHERE contenido='este es un texto de comparación de manera incorrecta y no eficiente'


Código PHP:
<? 

function textual($str) {
  return 
str_replace(array("\r\n""\r""\n"), "<br />"$str);
  
// Esta funcion devuelve saltos de lineas perfectamente correctas!
}


$sql "INSERT INTO base_datos.tabla (tabla.id, 
                                      tabla.tabla) 
        VALUES (NULL, '"
.textual($_POST['tabla'])."');";
        
   
$query mysql_query($sql) or die('[ERROR]-> No se pudo hacer el query!');
   
 
 
?>
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 05:10.