PHP - Por qué se codifica html al guardar en la db

 
Vista:
Imágen de perfil de William
Val: 38
Ha aumentado su posición en 4 puestos en PHP (en relación al último mes)
Gráfica de PHP

Por qué se codifica html al guardar en la db

Publicado por William (14 intervenciones) el 24/01/2018 20:17:35
Hola a todos, estoy usando la clase wpdb de wordpress para guardar datos en la db, específicamente estoy tomando el contenido de la descripción de un producto que está en html y guardándolo en la base de datos en la tabla wp_posts, columna post_content, el problema es que cuando guardo el codigo html en la base de datos, cuando voy a ver qué guardó veo que se codifica el html pasándolo a iquotes y de esta manera cuando voy a ver la descripción del producto en el dashboard de wordpress, en la pestaña "visual" se ve el codigo html y en la pestaña text se ve el html codificado.

Asi es como estoy guardando la descripcion:

1
2
3
4
5
6
7
8
9
$wpdb->update(
    'wp_posts',
    array(
        'post_content'=>($product_description_en_html)
        ),
    array(
        'ID'=>$post_id
        )
);

Si por ejemplo el contenido html fuera:
<p>Este es </p><strong>Mi contenido</strong>

Entonces queda guardado asi:
&lt;p&gt;Este es &lt;/p&gt;&lt;strong&gt;Mi contenido&lt;/strong&gt;

Otro punto interesante es que cuando guardo el Html como una cadena fija no como variable
por ejemplo: 'post_content'=>('<p>Este es </p><strong>Mi contenido</strong>') , entonces si guarda correctamente.

también he intentado guardarlo mendiante

1
2
3
4
$post_id = wp_insert_post( array(
    'post_title' => $product_title,
    'post_content' => $contenido_html
));

Pero pasa lo mismo;

Gracias por su ayuda, cualquier sugerencia será bien recibida.
Valora esta pregunta
Me gusta: Está pregunta es útil y esta claraNo me gusta: Está pregunta no esta clara o no es útil
0
Responder
Imágen de perfil de Alejandro
Val: 1.634
Plata
Ha mantenido su posición en PHP (en relación al último mes)
Gráfica de PHP

Por qué se codifica html al guardar en la db

Publicado por Alejandro (837 intervenciones) el 25/01/2018 00:08:39
  • Alejandro se encuentra ahora conectado en el
  • chat de PHP
¿No utilizas htmlspecialchars() para guardarlo?
para mostrarlo utiliza htmlspecialchars_decode()

me parece que lo hacen asi para evitar problemas

Ejemplo:
1
2
$imagen = "<img src='images/foto.jpg' />";
$query = "INSERT INTO tabla (Campo1) VALUES ( '$imagen')";
esto generaria la cadena
1
INSERT INTO tabla (Campo1) VALUES ( '<img src='images/foto.jpg' />')
como puedes ver el valor se truncaria en el =' e images/foto.jpg' /> daria error de sintaxis
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
0
Comentar
Imágen de perfil de William
Val: 38
Ha aumentado su posición en 4 puestos en PHP (en relación al último mes)
Gráfica de PHP

Por qué se codifica html al guardar en la db

Publicado por William (14 intervenciones) el 25/01/2018 01:29:48
Hola Alejandro, se podrían usar estas funciones pero como no soy yo quien lo desencripta sino wordpress, entonces no tengo control sobre el desencriptado, yo lo envío asi a la db:
<p>Este es </p><strong>Mi contenido</strong>

Esto se convierte en:
&lt;p&gt;Este es &lt;/p&gt;&lt;strong&gt;Mi contenido&lt;/strong&gt;

Y luego al entrar al producto en el dashboard de wordpress, en vez de ver el html interpretado en el editor de la descripción del producto en la pestaña visual, lo que veo es el html y en la pestaña texto veo el html como los iquotes.

Lo que no entiendo es cómo hace wordpress para guardar html en la db.

Gracias por tu interés!
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
0
Comentar
Imágen de perfil de William
Val: 38
Ha aumentado su posición en 4 puestos en PHP (en relación al último mes)
Gráfica de PHP

Por qué se codifica html al guardar en la db

Publicado por William (14 intervenciones) el 25/01/2018 03:09:09
Encontré la solución, lo que estaba ocurriendo era que me estaba trayendo los datos de la primera db en formato iquote y no en html como yo pensaba, solo que se presta a confusión porque cuando se muestra con echo se ve como html pero lo que en realidad estaba haciendo el navegador era interpretar los iquotes, entonces lo que debía hacer era simplemente convertir dichos iquotes a html mediante la funcion htmlspecialchars_decode(); y enviarlo a la segunda db, asi quedarían guardado en html como yo quería.
Espero le pueda servir a alguien!
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
0
Comentar