Foros del Web » Programando para Internet » PHP »

Eliminar saltos de línea de una cadena (PHP->Javascript)

Estas en el tema de Eliminar saltos de línea de una cadena (PHP->Javascript) en el foro de PHP en Foros del Web. Hola a todo aquel que pase a leer esto, Utilizo FCKEditor (editor WYSIWYG famosillo, por si alguien no lo conoce) en el panel de administración ...
  #1 (permalink)  
Antiguo 11/02/2008, 09:17
Avatar de Cristiaen  
Fecha de Ingreso: enero-2008
Mensajes: 29
Antigüedad: 16 años, 3 meses
Puntos: 0
Pregunta Eliminar saltos de línea de una cadena (PHP->Javascript)

Hola a todo aquel que pase a leer esto,

Utilizo FCKEditor (editor WYSIWYG famosillo, por si alguien no lo conoce) en el panel de administración de una página que estoy desarrollando y tengo el siguiente problema:

Al crear una nueva página con un formulario, el contenido de la cual lo genera FCKEditor como HTML, lo guardo en una tabla de una base de datos MySQL. Luego si quiero editarla, puedo hacerlo a través de un formulario parecido que recoge los datos de la página en cuestión y la muestra en el formulario.

Ahora viene el problema, y es que cuando quiero que el editor WYSIWYG muestre el código HTML este se muestra con saltos de línea, lo cual hace que la variable Javascript no sea válida. Me explico:

Código HTML:
<script language="javascript"> 
Código:
var oFCKeditor = new FCKeditor('content');
oFCKeditor.Width = "97%";
oFCKeditor.Height = 200;
oFCKeditor.Config[ "AutoDetectLanguage" ] = false;
oFCKeditor.Config[ "DefaultLanguage" ] = "ca";
oFCKeditor.ToolbarSet = "Default";
oFCKeditor.Value = '<?php echo $new["content"]; ?>';
oFCKeditor.Config[ "SkinPath" ] = 'skins/Office2007Real/';
oFCKeditor.BasePath = "http://xxx/cairat/admin/themes/cairat/fckeditor/";
oFCKeditor.Create();
Código HTML:
</script> 
Cuando se genera la página, la linea marcada en rojo se transforma en algo así:

Código:
oFCKeditor.Value = '<p>adsa</p>
<p>&nbsp;</p>
<p>dd</p>';oFCKeditor.Create();
Con lo cual, los saltos de línea impiden que la lectura Javascript se realice y no aparece nada.

He probado varias soluciones entre Google y Foros del web, como por ejemplo al guardar la información en la base de datos cuando se crea la página

Código PHP:
$content=$_POST["content"];
$content trim($content);
$content str_replace("
"
$content);
$content rtrim($content);
$content chop($content);
$content str_replace("\n"$content);
$content str_replace("[\n\r]"$content);
$content str_replace("[\n]"$content); 
pero ninguna de ellas ha funcionado...

Otra solución que se me ha ocurrido es intentar contar las líneas de la cadena en PHP y luego ir mostrándolas una por una:

Código:
oFCKEditor.Value = '<p>adsa</p>';
oFCKEditor.Value+= '<p>&nbsp;</p>';
etc..
Pero no he encontrado ninguna función en PHP para contar cadenas que no sea

Código PHP:
explode("\n"$content); 
Y eso no me sirve, no sé por qué pero no cuenta nada.

¿Alguna sugerencia para eliminar los saltos de línea o contar líneas?

Muchas gracias!

Última edición por Cristiaen; 11/02/2008 a las 09:19 Razón: Error en código
  #2 (permalink)  
Antiguo 11/02/2008, 09:26
Avatar de Carlojas  
Fecha de Ingreso: junio-2007
Ubicación: Shikasta
Mensajes: 1.272
Antigüedad: 16 años, 10 meses
Puntos: 49
Re: Eliminar saltos de línea de una cadena (PHP->Javascript)

Puedes utilizar las funciones nl2br y htmlentities

Saludos.
  #3 (permalink)  
Antiguo 11/02/2008, 09:38
Avatar de Cristiaen  
Fecha de Ingreso: enero-2008
Mensajes: 29
Antigüedad: 16 años, 3 meses
Puntos: 0
Mensaje Re: Eliminar saltos de línea de una cadena (PHP->Javascript)

Cita:
Iniciado por Carlojas Ver Mensaje
Puedes utilizar las funciones nl2br y htmlentities

Saludos.
Con la función nl2br ha quedado así:

Código:
oFCKeditor.Value = '<p>dasda</p><br />
<p>&nbsp;</p><br />
<p>&nbsp;</p><br />
<p>dsadas</p><br />
<p>&nbsp;</p><br />
<p>d</p><br />
<p>d</p>';
y el htmlentities solo formatea y luego desformatea, pero me lo deja igual y no me sirve

Gracias por tu rápida respuesta!
  #4 (permalink)  
Antiguo 11/02/2008, 09:38
Avatar de GatorV
$this->role('moderador');
 
Fecha de Ingreso: mayo-2006
Ubicación: /home/ams/
Mensajes: 38.567
Antigüedad: 17 años, 11 meses
Puntos: 2135
Re: Eliminar saltos de línea de una cadena (PHP->Javascript)

mmm que yo sepa, no hay ningún problema ti tu pones saltos de linea en una variable en JavaScript, así que tu problema puede estar en otro lado.

JavaScript se delimita (al igual que PHP) con ; asi que tu puedes hacer esto sin problema:
Código:
var texto = 'aafsd
sadfsa
asdfsafs
sfdasfd
asfdas';
Y se ejecuta sin problemas.

Saludos.
  #5 (permalink)  
Antiguo 11/02/2008, 09:53
Avatar de Cristiaen  
Fecha de Ingreso: enero-2008
Mensajes: 29
Antigüedad: 16 años, 3 meses
Puntos: 0
Re: Eliminar saltos de línea de una cadena (PHP->Javascript)

Eso pensaba yo, pero si pruebo a escribir una página con tan sólo una línea funciona a la perfección

Sigo sin conseguirlo, ni cortando cadenas PHP

EDITADO: Bueno ya lo he conseguido, peleándome un poco con PHP :D

Pongo aquí la solución por si alguien en un futuro llega desde algún buscador:

Antes de guardar el contenido de FCKeditor en la base de datos, añadir:

Código PHP:
    $content $_POST["content"];
    
$sustituye = array("\r\n""\n\r""\n""\r");
    
$content str_replace($sustituye""$content); 
y el resultado Javascript es:

Código:
var oFCKeditor = new FCKeditor('content');
oFCKeditor.Width = "97%";
oFCKeditor.Height = 200;
oFCKeditor.Config[ "AutoDetectLanguage" ] = false;
oFCKeditor.Config[ "DefaultLanguage" ] = "ca";
oFCKeditor.ToolbarSet = "Default";
oFCKeditor.Value = '<p>a</p><p>b</p><p>c</p><p>d</p>';
oFCKeditor.Config[ "SkinPath" ] = 'skins/Office2007Real/';
oFCKeditor.BasePath = "http://xxx/cairat/admin/themes/cairat/fckeditor/";
oFCKeditor.Create();
Gracias por la ayuda tan rápida, se agradece mucho.

Saludos!

Última edición por Cristiaen; 11/02/2008 a las 10:00 Razón: Solución encontrada
  #6 (permalink)  
Antiguo 10/09/2008, 08:10
 
Fecha de Ingreso: octubre-2006
Mensajes: 6
Antigüedad: 17 años, 6 meses
Puntos: 0
Respuesta: Eliminar saltos de línea de una cadena (PHP->Javascript)

Yo lo solucioné de esta forma:

oFCKeditor.Value = '<?php echo preg_replace("(\r\n)", "", $descripcion); ?>';

De esa manera reemplazo los cambios de línea (que están compuestos por retorno de carro más línea nueva) por nada, o sea, por una cadena nula, vacía. Eso lo arregla viniendo de la base de datos, en la base de datos queda almacenado sin modificarse. Aunque es bueno guardarlo en la base de datos directamente así y sería recomendable porque es más rápido luego para editar (ya que no haría el arreglo de la cadena cada vez que se edite). Pero como no se suele editar tan seguido no afecta demasiado al rendimiento.
Lo que sí, este sirve nada más para la forma de \r\n pero es el cambio de línea habitual en estos sistemas así que creo que funcionaría siempre y en la mayoría de los servidores.

Recomiendo el uso de la función preg_replace ya que es bastante rápida. Se han hecho pruebas de velocidad de esa función vs otras (como la que usa el amigo que dejó su solución) y preg_replace siempre resultó ser más rápida.

Nota: No sé si lo habrán pensado, lo sabían o lo estudiaron pero por qué existe \r\n. Eso viene de las máquinas de escribir en las cuales uno debía primero empujar el carro (rodillo que llevaba la hoja) y retornarlo a su posición inicial. Eso se llama retorno de carro (carriage return en inglés) y en el ordenador es simbolizado por \r. Luego había que apretar una palanquita para que girara el papel lo que hacía cambiar a la línea siguiente. Eso en un ordenador es simbolizado por \n y significa nueva línea (new line en inglés). Entonces para mantener compatibilidad y analogía con las máquinas de escribir es que se mantuvo esa postura. Porque una PC no necesita hacer un retorno de carro, simplemente es un cambio de línea y ya se sabe que la línea se empieza del otro lado, al comienzo de la hoja. Pero en las máquinas de escribir había que hacer todo el proceso y (esta es mi opinión) supongo que para mantener una analogía en cuanto al funcionamiento y relación con el usuario se consideró que una PC debía utilizar el concepto de retorno de carro. Lo que supongo que (también mi opinión) le indicaba al software (y quizá al equipo de impresión) que colocara el cursor al comienzo de la línea.

Saludos.
  #7 (permalink)  
Antiguo 21/05/2009, 11:51
xub
 
Fecha de Ingreso: octubre-2006
Mensajes: 2
Antigüedad: 17 años, 6 meses
Puntos: 0
Respuesta: Eliminar saltos de línea de una cadena (PHP->Javascript)

Yo lo solucioné de esta forma:

oFCKeditor.Value = '<?php echo preg_replace("(\r\n)", "", $descripcion); ?>';

bueno te comento que de la primer forma funciona ...
de la segunda no ...
yo lo logre con un mix entre las dos jejej

$content = $texto;
$sustituye = array("(\r\n)", "(\n\r)", "(\n)", "(\r)");
$content = preg_replace($sustituye, "", $content);


Última edición por xub; 21/05/2009 a las 11:56
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

SíEste tema le ha gustado a 3 personas (incluyéndote)




La zona horaria es GMT -6. Ahora son las 16:41.