Corrupción del texto de la publicación de WordPress

7 minutos de lectura

avatar de usuario
Sanders el Softwarer

Ayer comencé un pequeño blog privado usando WordPress 4.1 (Windows 7, Apache 2.4, MySQL 5.5, PHP 5.6.1, UTF8, configuraciones generalmente comunes). Empecé a transferir mis artículos a él; varios de ellos estaba bien, pero encontré dos artículos que no se pueden guardar correctamente.

Al intentar guardar estos artículos como publicaciones, WordPress se actualiza y muestra una versión corrupta del texto. La corrupción exacta es: se elimina la mitad del artículo mientras que se insertan varios caracteres basura (%D? por ejemplo) en su lugar.

Traté de actualizar WP a la versión actual (4.2.2) – el error es el mismo (actualización: 4.2.3 – el error es el mismo). Traté de guardar el artículo como la página en lugar de la publicación; el error es el mismo. Probé el tema estándar en lugar del personalizado; el error es el mismo.

Parece que los artículos ‘publicados’ son más largos que otros: 5,2 Kb y 7,5 Kb. Traté de ver qué pasaba si guardaba piezas menores. Mientras guarda una pieza muy corta, funciona bien. Si hace una pieza más larga, WP pierde la cola de este texto. Si hace una pieza más larga, WP comienza a perder el medio como se describe arriba.

Actualmente no tengo idea de cómo reparar o depurar este caso. ¿Alguna sugerencia?

========== Información adicional ==========

Intenté ejecutar este código en mi blog:

<?php

  $my_post = array(
     'post_title' => 'Caption',
     'post_status' => 'publish',
     'post_content' => 'the very-very-long text of my article'
  );

  echo wp_insert_post( $my_post );

?>

Cuando se ejecuta, es una publicación excelente como debe ser (gracias a urka_mazurka por aconsejarme).

Cuando traté de editar esta publicación en WP, también se corrompió al guardar. Además, cuando traté de editar este archivo PHP en WP (usando la función de edición de temas), también se corrompió al guardar.

===== Información adicional 2 =====

Mesa wp_posts la colación es utf8mb4_unicode_ci (resultado de MOSTRAR ESTADO DE LA TABLA)

Parece que urka_mazurka fueron los más cercanos… al menos puedo publicar estas publicaciones a través de wp_insert_post. Lástima que no puedo dirigirle la recompensa porque no publicó ninguna respuesta.

  • ¿Puede mostrar contenido de muestra que se está recortando?

    – Syed Qarib

    27/07/2015 a las 10:00

  • Por ejemplo, el texto de proza.ru/2014/11/15/241. La captura de pantalla antes de guardar se puede ver en s017.radikal.ru/i420/1507/a0/f3c95ececa4b.png . Captura de pantalla después de guardar es s017.radikal.ru/i411/1507/15/2b9f5d840d0f.png

    – Sanders el programador

    27 de julio de 2015 a las 14:51

  • Captura de pantalla de s020.radikal.ru/i703/1507/04/e757755f3e52.png es más adecuado. La línea roja muestra caracteres corruptos que reemplazan varios párrafos del texto original.

    – Sanders el programador

    27 de julio de 2015 a las 15:13

  • Mencionaste que cambiaste de tema, pero nunca hablaste de los complementos instalados o deshabilitarlos. ¿Usted tiene alguna?

    – Scott ‘scm6079’

    28 de julio de 2015 a las 0:39

  • No, por el momento no tengo ningún plugin.

    – Sanders el programador

    28 de julio de 2015 a las 5:41

avatar de usuario
mibrito

de acuerdo con su explicación, el problema parece estar en el núcleo de WordPress, le recomendaré que pruebe un enfoque diferente:

  1. Insertar una publicación usando wp_insert_post función pero sin contenido o un contenido “seguro” como una simple palabra.
  2. Entonces usa $wpdb para actualizar la publicación con el contenido real.

Aquí hay un recorte de cómo lo haré:

  $my_post = array(
     'post_title' => 'Caption',
     'post_status' => 'publish',
     'post_content' => 'dummy text'
  );
//get the post id
  $post_id = wp_insert_post( $my_post );

global $wpdb;
//now update the post with the real text
$wpdb->update( 
     $wpdb->prefix . 'posts', 
    array( 
        'post_content' => 'YOUR LONG TEXT HERE',    
    ), 
    array( 'ID' => $post_id ), 
    array('%s'), 
    array('%d') 
);

Si no obtiene el resultado que desea con esto, entonces es un problema con su configuración de php o configuración de MySQL a menos que esté dispuesto a probar una solución más hostil y usar $wpdb->consulta en vez de $wpdb->update como esto:

$big_text = "YOUR BIG TEXT HERE";
$wpdb->query(
    "UPDATE $wpdb->posts 
    SET post_content = $big_text
    WHERE ID = $post_id"
);

Haznos saber.

Asegúrese de que los artículos que está transfiriendo no tengan codificación de caracteres incrustados. Este es un problema común cuando intenta copiar cosas de un documento formateado como un documento de Microsoft Word, ya que guarda la información de codificación de caracteres cuando se copia el texto.

En el cuadro WYSIWYG de WordPress, hay un icono para revelar el código fuente. Es posible que pueda detectar una codificación de caracteres extraños al ver esto.

De lo contrario, intente pegar sus artículos en un editor de texto y convierta todo el texto a la codificación estándar UTF-8 antes de pegarlo en WordPress.

  • Gracias. Supongo que no hay caracteres incrustados (no uso el wysiwyg de WordPress, entre otros asuntos). Intenté pegar en WordPress desde el texto Notepad++ UTF-8, nada cambia.

    – Sanders el programador

    27 de julio de 2015 a las 15:17

  • ¿Qué sucede si intenta insertar contenido de publicación a través de una función ajax (llamando a wp_insert_post)? de esta manera, debería poder excluir los problemas de la base de datos

    – urka_mazurka

    27 de julio de 2015 a las 17:38


  • Gracias, @urka_mazurka, probé esto (descrito como adición en el texto de la pregunta)

    – Sanders el programador

    27/07/2015 a las 22:00

avatar de usuario
Torbellino

¿Ha intentado deshabilitar mod_security (a través de .htaccess)?

<IfModule mod_security.c>
SecFilterEngine Off
SecFilterScanPOST Off
</IfModule>

Hay muchas personas que se quejan de problemas relacionados con guardar publicaciones largas en WordPress, o publicaciones que no se pueden guardar debido a ciertas palabras. Eso es porque a veces WordPress no funciona bien con mod_security activado. Algunos de ellos resolvieron esto al deshabilitar esta función… Algunos de ellos lo resolvieron cambiando el límite de memoria de WP… Tal vez algunos de estos lo ayuden a resolver su problema (o al menos a reducirlo).

  • Gracias por responder. Intenté esto, nada cambió 🙁 Exactamente, puse estas líneas en el .htaccess del blog después de #END WORDPRESS, reinicié Apache, intenté guardar el texto y vi que estaba corrupto como de costumbre.

    – Sanders el programador

    30 de julio de 2015 a las 16:14

  • Creo que estas reglas deben venir antes de Las reglas de WordPress.

    – rnevio

    30 de julio de 2015 a las 19:01

Un par de sugerencias:

*Nunca copie / pegue de Word a WordPress.

*Siempre asegúrese de pasar en texto limpio sin formato

*Si no está seguro, siempre puede copiar/pegar en el bloc de notas ++, luego copiar/pegar en wordpress.

*Si ve caracteres extraños, podría ser un problema de codificación UTF8. Solíamos tener ese problema cuando subíamos el sitio del entorno de desarrollo al entorno de integración. Lo solucionamos abriendo toda la base de datos .sql en el bloc de notas++ y yendo a Codificación -> UTF8 -> Guardar

avatar de usuario
Gaurav

Debe verificar el archivo “wp-config.php” para confirmar que el código escrito a continuación está presente en él:

define('DB_CHARSET', 'utf8');

Si el código anterior está presente en el archivo y aún tiene el problema, agregue este código en el archivo ‘header.php’ del tema.

  • Gracias, pero nada cambia.

    – Sanders el programador

    28 de junio de 2016 a las 22:15

avatar de usuario
Buddhika Dombawela

Agregar Autor de la publicación y Tipo de mensaje por tu publicación

Aquí pase la identificación del usuario como post_author (1 es el primer usuario que creamos en la instalación de wordpress)

$my_post = array(
    'post_title' => 'Caption',
    'post_status' => 'publish',
    'post_type'   => 'post',
    'post_content' => 'the very-very-long text of my article',
    'post_author'   => 1,
);

  • Gracias, pero nada cambia.

    – Sanders el programador

    28 de junio de 2016 a las 22:15

avatar de usuario
Sanders el Softwarer

Por fin lo he solucionado.

Todo este #@[email protected]#[email protected]#$ se debió a una falta de ortografía en la opción sys_temp_dir de php.ini. Cada vez que el motor PHP falla al crear un archivo temporal, el contenido de la publicación se comprimió utilizando esta técnica única sin ninguna advertencia visible.

¿Ha sido útil esta solución?