entre Desarrolladores

Recibe ayuda de expertos

Registrate y pregunta

Es gratis y fácil

Recibe respuestas

Respuestas, votos y comentarios

Vota y selecciona respuestas

Recibe puntos, vota y da la solución

Pregunta

1voto

Problema con TextArea de ckeditor en php

Hola, estoy haciendo la parte de editar las noticias cuando recojo los valores tengo el objeto noticia con sus valores y dentro de mi fichero de view en mi codeigniter tengo un TextArea con ckeditor en el cual introduzco el valor que le paso a mi clase y recibe bien el valor y lo muestra bien cuando voy a editar, edito el contenido pero cuando envío los datos de mi noticia editada por método post todos los input envían bien los datos a mi clase controladora pero el TextArea no me envía ningún cambio sino que manda exactamente lo que tiene sin asumir ningún cambio.

<textarea class="ckeditor" rows="15" name="contenido" id="textarea">
             <?php if ($editar == true) {   echo @$noticia->noticia; }?> 

0voto

carlossevi comentado

Hola Dairon, no acabo de entender el problema ¿la línea de echo $this->input->post('contenido',TRUE); del controlador no muestra los cambios que has hecho en textarea? Es que por un lado entiendo que "no envía ningún cambio" y por otro que "sin embargo los cambios sufridos en el texto si lo asume".

No me queda claro si lo que te falla son los cambios en las imágenes o en los textos.

0voto

dairon comentado

Hola Carlos, los cambios que hago en la imagen como el tamaño, los bordes y esas cosas no se quedan fijos, entonces cuando los paso para mi controllador todo esta por default en la imagen

0voto

carlossevi comentado

Perdona pero sigo sin entenderlo.

0voto

dairon comentado

Acabo de comprobar que a la hora de insertar tampoco me coge las propiedades de la imagen

0voto

white comentado

podrías agregegar el codigo del controlador donde guardas y editas la noticia?

0voto

dairon comentado

Mi controlador en Noticia:

        $data['noticia'] = $noticia;        
        $data['editar'] = TRUE;
        $this->load->view('admin/head',$data);
        $this->load->view('admin/nueva_noticia',$data);
        $this->load->view('admin/foot',$data);

Mi vista en admin/nueva_noticia la parte del TextArea:

        <textarea  class="ckeditor" rows="55" name="contenido" id="textarea"><?php if ($editar == true) { echo @$noticia->noticia; }?></textarea>

<script src="<?php echo base_url() ?>js/ckeditor/ckeditor.js"></script>    

Controller donde proceso los datos:

        $data = array();        
        $data['titulo'] = $this->input->post('titulo'); 
        $data['descripcion'] = $this->input->post('descripcion');
        $data['etiquetas'] = $this->input->post('etiquetas');
        $data['noticia'] = $this->input->post('contenido');
        echo $data['noticia'];

El problema es que la imagen asume sus cambios cuando se ven en la vista de editar, pero una vez la variable pasa los datos hacia el controlador esta pasa sin ningún cambio realizado.
Saludos Dairon

0voto

white comentado

es posible que algun .css de tu pagina no te permita ver los cambios, puedes intentar ver el codigo de contenido, en lugar de echo $data['noticia']; usa:

var_dump(htmlspecialchars($this->input->post('contenido'), ENT_QUOTES));

asi ves si envía las imagenes con el atributo style="" correctamente.

0voto

dairon comentado

puse una imaben y un texto de prueba de una linea y me devolvió esto:

string '<p><img alt="imagen de prueba" src="http://www.cubadebate.cu/wp-content/uploads/2015/02/Parlamento-europeo.jpg"  height:165px; margin:2px 3px; width:273px" />documento de prueba</p>
&'

0voto

white comentado

el tamaño de la imagen en ancho: 273px y en alto: 165px son correctos? asi los editaste en el editor wysiwyg ckeditor?

1 Respuesta

3votos

white Puntos75880

Hola @dairon, por si no resolviste tu problema se me olvido y se me paso por alto que en codeigniter podrías tener el filtro XSS activo por lo que no recibes el atributo style="" correctamente, para solucionar esto debes definir el segundo parametro como FALSE en $this->input->post de esta manera:

$this->input->post('contenido', FALSE)

sin olvidar sanear correctamente o en lo posible usar bbcode, markdown o algun lenguaje de marcado.

saludos!

0voto

carlossevi comentado

¡Muy buen detalle! Dejo el enlace a la documentación: https://ellislab.com/codeigniter/user-guide/libraries/input.html

0voto

dairon comentado

Ahora mismo voy a probar. Gracias
La programación está echa de pequeños detalles como toda creación jejeje

0voto

dairon comentado

Me devuelve este html en la imagen:

<img alt="HOLA" src="https://fbcdn-sphotos-h-a.akamaihd.net/hphotos-ak-xpf1/t31.0-8/p843x403/1978459_773364682729498_991138345131738135_o.jpg" height:113px;="" width:200px"="">

lo modifico a este otro y si me funciona:

<img alt="HOLA" src="https://fbcdn-sphotos-h-a.akamaihd.net/hphotos-ak-xpf1/t31.0-8/p843x403/1978459_773364682729498_991138345131738135_o.jpg" height="113" width="200">

Necesito que se quede con el tamaño que le dé en el editor pero es como si el código no cioncidiera con el que es correcto

0voto

white comentado

la primera etiqueta <img> tiene problemas por una comilla mal cerrada, pero no puedo saber cual, ya que tendria que ver el codigo fuente de tu página para saber como fue enviada, si puedes compartir ese detalle sería de ayuda.

Ahora solo como a modo de confirmar que es el filtro xss el que te causa problemas desactiva el filtro xss globalmente de application/config/config.php

dejalo de esta manera:

$config['global_xss_filtering'] = FALSE;

intenta probando ahi sin htmlspecialchars y ve que el resultado sea el deseado var_dump($this->input->post('contenido'));

El archivo core/security.php tiene que ver en esto ya que este se encarga de remover atributos como style, script, xmlns, etc. considerados peligrosos.

Tambien si tienes definido la validacion de formularios, recuerda remover tambien el filtro xss_clean
http://www.codeigniter.com/user_guide/libraries/form_validation.html#preppingdata

como dije en la respuesta lo mejor podria ser usar un lenguaje de marcado, ckeditor dispone de un plugin para bbcode solo necesitarías una libreria para formatear bbcode, y en la red abundan.

0voto

dairon comentado

Voy a ponerme a buscar todo eso ahora a ver si logro resolver el problema. gracias @white

0voto

dairon comentado

Eso mismo era fui al config y desabilite el global_xss_filtering y cogio todo bien, pero ahora el problema es como lo desactivo solamente para ese momento pues pierdo seguirdad si lo mantengo así para todo el sitio.
Que opinas @white ??

0voto

white comentado

Para filtrar el xss podrias definir como TRUE el segundo parametro del metodo input->post,

$this->input->post('campo', TRUE)

pero con tu campo contenido o cualquier otro campo que no tenga activo este filtro podrías tener problemas de seguridad, hay 2 soluciones.

  • crear una funcion que te permite publicar el html removiendo lo malicioso.
  • hacer uso de lenguajes de marcado.

si eres sólo tú el que publica noticias y tiene acceso entonces no deberías tener mayor problema, en cambio si varios usuarios van a publicar en tu sitio entonces deberías filtrar tus campos.

Yo voy por lo segundo el uso de un lenguaje de marcado te da inclusive opciones de restringir a tus usuarios que etiquetas usar y cuales no, librerias existen muchas como por ejemplo:

http://jbbcode.com/examples => http://ckeditor.com/addon/bbcode
https://github.com/jonlabelle/ci-markdown => https://github.com/nickcernis/html-to-markdown

saludos!

0voto

dairon comentado

Gracias, yo optaré por la segunda, para garantizar seguridad aunque los que publican noticias son los redactores y periodistas que no saben de programación ni de etiquetas.
Saludos y Gracias por la solución

Por favor, accede o regístrate para responder a esta pregunta.

Otras Preguntas y Respuestas


...

Bienvenido a entre Desarrolladores, donde puedes realizar preguntas y recibir respuestas de otros miembros de la comunidad.

Conecta