• Publicidad

Guardar salto de línea en campo de CSV

Todo acerca de las bases de datos que existen: SQL, MySQL, Oracle, Postgres, CSV, etc.

Guardar salto de línea en campo de CSV

Notapor danimera » 2016-09-02 09:50 @451

Buen día. Esta vez tengo un escenario un poco raro.

Mi base de datos es todo un grupo de archivos CSV, que manejo con DBD::CSV super bien.
Ahora lo que quiero es, en un campo, guardar saltos de línea pero que no afecten el CSV.

Tengo un formulario que tiene un campo con FCKeditor para que el usuario ponga su HTML ahí, pero quiero conservar la sangría y los saltos de línea, solo para ese campo. El problema es que cuando guardo el valor de ese campo hago lo siguiente:
Sintáxis: [ Descargar ] [ Ocultar ]
Using perl Syntax Highlighting
  1.                 my $ch = $field->{'content'};
  2.                        
  3.                 $ch =~ s/\r/<br>/gi;
  4.                 $ch =~ s/\n/<br>/gi;
Coloreado en 0.003 segundos, usando GeSHi 1.0.8.4

Y claro, cuando cargo el valor en el campo, todos los saltos de línea se vuelven '<br>' cosa que no es que me agrada de a mucho, antes utilizaba un módulo llamado CGI::FCKeditor pero ya no funciona con los navegadores modernos...

Así que mi cuestión es cómo mantener el árbol generado en el fckeditor sin dañar el fichero csv.
100% Telch - Perl Web Programming
Cali PerlMongers: http://cali.pm.org
Avatar de Usuario
danimera
Perlero frecuente
Perlero frecuente
 
Mensajes: 871
Registrado: 2005-06-23 19:02 @834
Ubicación: Colombia

Publicidad

Re: Guardar salto de línea en campo de CSV

Notapor explorer » 2016-09-02 12:51 @577

Según leo el manual de DBD::CSV, se utiliza el módulo Text::CSV_XS para hacer la lectura/escritura de los registros, y leyendo la especificación que aparece en esa página de manual (traducido):
CSV es un formato de datos que tiene campos/columnas separado por el carácter coma y registros/filas separados por (caracteres) nuevas líneas. Campos que contienen un carácter especial (coma, nueva línea o doble comilla), se debe encerrar entre comillas dobles.

Así que sí puedes guardar los caracteres de fin de línea en un campo.

Sobre el tema de convertirlo a '<br>', es algo que he hecho mucho, y que sigo haciendo. La clave está, en la salida, para que lo haga de forma literal, no "escapada", que el módulo CGI hace si cierta opción está activada.

Para ello, aunque a veces uso CGI, la salida lo hago por medio de Template Toolkit, y asunto resuelto.

El único problema que queda, a la hora de sacar código literal, es la evitar ataques XSS, así que hay que hacer un prefiltrado a la hora de admitir entrada por parte del usuario.
JF^D Perl programming & Raku programming. Grupo en Telegram: https://t.me/Perl_ES
Avatar de Usuario
explorer
Administrador
Administrador
 
Mensajes: 14476
Registrado: 2005-07-24 18:12 @800
Ubicación: Valladolid, España

Re: Guardar salto de línea en campo de CSV

Notapor danimera » 2016-09-05 08:26 @393

:O Muchas gracias, explorer, creo entonces que lo tengo, aunque se me hace un poco raro hacer algo como
Sintáxis: [ Descargar ] [ Ocultar ]
Using perl Syntax Highlighting
  1. my $ch = $field->{'content'};                    
  2. $ch =~ s/\r/"\r"/gi;
  3. $ch =~ s/\n/"\n"/gi;
Coloreado en 0.001 segundos, usando GeSHi 1.0.8.4

¿Lo anterior será válido? En todo caso mi idea es no convertir a BR, realmente no es necesario y no me agrada, solo quiero que no se dañe mi CSV por el uso de un editor tipo FCKEditor.
100% Telch - Perl Web Programming
Cali PerlMongers: http://cali.pm.org
Avatar de Usuario
danimera
Perlero frecuente
Perlero frecuente
 
Mensajes: 871
Registrado: 2005-06-23 19:02 @834
Ubicación: Colombia

Re: Guardar salto de línea en campo de CSV

Notapor explorer » 2016-09-05 16:52 @744

Hummm... no... esa no es la idea.

Lo que quieres es guardar todo el área 'content' en un único campo CSV, ¿no?

Entonces, se podría hacer esto:
Sintáxis: [ Descargar ] [ Ocultar ]
Using perl Syntax Highlighting
  1. my $ch = '"' . $field->{'content'} . '"';
Coloreado en 0.001 segundos, usando GeSHi 1.0.8.4

y ya está entrecomillado.

De todas maneras... yo creo que el módulo Text::CSV es capaz de hacer estas cosas de forma automática, creo.
JF^D Perl programming & Raku programming. Grupo en Telegram: https://t.me/Perl_ES
Avatar de Usuario
explorer
Administrador
Administrador
 
Mensajes: 14476
Registrado: 2005-07-24 18:12 @800
Ubicación: Valladolid, España

Re: Guardar salto de línea en campo de CSV

Notapor danimera » 2016-09-07 12:06 @546

Bueno, ya lo estoy haciendo: lo guardo en el campo del cvs, pero el problema es que si tengo saltos de líneas entonces se daña el csv. Entonces intentaré
Sintáxis: [ Descargar ] [ Ocultar ]
Using perl Syntax Highlighting
  1. my $ch = '"' . $field->{'content'} . '"';
Coloreado en 0.001 segundos, usando GeSHi 1.0.8.4

pero el problema en sí es que estoy usando un FCKEditor. Ahí es el problema, ya que si uso un textarea, no tengo problemas.
100% Telch - Perl Web Programming
Cali PerlMongers: http://cali.pm.org
Avatar de Usuario
danimera
Perlero frecuente
Perlero frecuente
 
Mensajes: 871
Registrado: 2005-06-23 19:02 @834
Ubicación: Colombia


Volver a Bases de datos

¿Quién está conectado?

Usuarios navegando por este Foro: No hay usuarios registrados visitando el Foro y 2 invitados