WordPress-Post-Text-Korruption

Lesezeit: 7 Minuten

Sanders der Benutzeravatar des Softwarers
Sanders der Softwareentwickler

Gestern habe ich einen kleinen privaten Blog mit WordPress 4.1 gestartet (Windows 7, Apache 2.4, MySQL 5.5, PHP 5.6.1, UTF8, allgemein übliche Einstellungen). Ich fing an, meine Artikel dorthin zu übertragen; Einige davon waren in Ordnung, aber ich habe zwei Artikel gefunden, die nicht korrekt gespeichert werden können.

Beim Versuch, diese Artikel als Beiträge zu speichern, wird WordPress aktualisiert und zeigt eine beschädigte Textversion an. Genaue Beschädigung ist: Die Mitte des Artikels wird entfernt, während stattdessen mehrere überflüssige Zeichen (zB %D?) eingefügt werden.

Ich habe versucht, WP auf die aktuelle (4.2.2) Version zu aktualisieren – Fehler ist derselbe (Update: 4.2.3 – Fehler ist derselbe). Ich habe versucht, den Artikel als Seite statt als Post zu speichern – der Fehler ist derselbe. Ich habe das Standarddesign anstelle des benutzerdefinierten ausprobiert – der Fehler ist derselbe.

Es sieht so aus, als wären “herausgegebene” Artikel länger als andere – 5,2 KB und 7,5 KB. Ich habe versucht zu sehen, was passiert, wenn ich kleinere Stücke retten würde. Während ein sehr kurzes Stück gespeichert wird, funktioniert es gut. Wenn Sie ein längeres Stück machen, verliert WP den Schwanz dieses Textes. Wenn Sie ein längeres Stück machen, beginnt WP, die Mitte wie oben beschrieben zu verlieren.

Derzeit habe ich keine Ahnung, wie ich diesen Fall reparieren oder debuggen kann. Irgendwelche Vorschläge?

========== Zusätzliche Informationen ==========

Ich habe versucht, diesen Code in meinem Blog auszuführen:

<?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 );

?>

Wenn es ausgeführt wird, macht es einen exzellenten Post, wie es sein sollte (danke an urka_mazurka für diesen Hinweis).

Als ich versuchte, diesen Beitrag in WP zu bearbeiten, wurde er auch beim Speichern beschädigt. Wenn ich außerdem versuchte, diese PHP-Datei in WP zu bearbeiten (unter Verwendung der Einrichtung zum Bearbeiten von Themen), wird sie auch beim Speichern beschädigt.

===== Zusatzinfo 2 =====

Tisch wp_posts Kollation ist utf8mb4_unicode_ci (Ergebnis von SHOW TABLE STATUS)

Es sieht so aus, als wären urka_mazurka am nächsten gewesen … zumindest kann ich diese Beiträge über veröffentlichen wp_insert_post. Schade, dass ich kein Kopfgeld an ihn richten kann, weil er keine Antwort veröffentlicht hat.

  • Können Sie bitte Beispielinhalte zeigen, die getrimmt werden?

    – Syed Qarib

    27. Juli 2015 um 10:00 Uhr

  • Zum Beispiel der Text von proza.ru/2014/11/15/241. Screenshot vor dem Speichern kann unter angesehen werden s017.radikal.ru/i420/1507/a0/f3c95ececa4b.png . Screenshot nach dem Speichern ist s017.radikal.ru/i411/1507/15/2b9f5d840d0f.png

    – Sanders der Softwareentwickler

    27. Juli 2015 um 14:51 Uhr

  • Screenshot von s020.radikal.ru/i703/1507/04/e757755f3e52.png ist besser geeignet. Die rote Linie zeigt beschädigte Zeichen, die mehrere Absätze des Originaltexts ersetzen.

    – Sanders der Softwareentwickler

    27. Juli 2015 um 15:13 Uhr

  • Sie haben erwähnt, dass Sie Themen geändert haben – aber nie über installierte Plugins gesprochen oder sie deaktiviert haben. Hast du welche?

    – Scott ‘scm6079’

    28. Juli 2015 um 0:39 Uhr

  • Nein, im Moment habe ich kein Plugin.

    – Sanders der Softwareentwickler

    28. Juli 2015 um 5:41 Uhr

Benutzeravatar von mibrito
mibrito

Ihrer Erklärung nach scheint das Problem beim WordPress-Kern zu liegen, ich empfehle Ihnen, einen anderen Ansatz zu versuchen:

  1. Fügen Sie einen Beitrag mit ein wp_insert_post Funktion, aber ohne Inhalt oder einen “sicheren” Inhalt wie ein einfaches Wort.
  2. Dann benutze $wpdb um den Beitrag mit dem wahren Inhalt zu aktualisieren.

Hier ist ein Ausschnitt, wie ich es machen werde:

  $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') 
);

Wenn Sie damit nicht das gewünschte Ergebnis erzielen, liegt ein Problem mit Ihrer PHP- oder MySQL-Konfiguration vor, es sei denn, Sie sind bereit, eine unfreundlichere Lösung auszuprobieren und zu verwenden $wpdb->Abfrage Anstatt von $wpdb->update so was:

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

Lass uns wissen.

Stellen Sie sicher, dass die Artikel, die Sie übertragen, keine eingebettete Zeichencodierung haben. Dies ist ein häufiges Problem, wenn Sie versuchen, Inhalte aus einem formatierten Dokument wie einem Microsoft Word-Dokument zu kopieren, da beim Kopieren des Textes Informationen zur Zeichencodierung gespeichert werden.

In der WordPress WYSIWYG-Box gibt es ein Symbol, um den Quellcode anzuzeigen. Sie können möglicherweise eine seltsame Zeichencodierung erkennen, indem Sie dies anzeigen.

Versuchen Sie andernfalls, Ihre Artikel in einen Texteditor einzufügen und den gesamten Text in die Standard-UTF-8-Codierung zu konvertieren, bevor Sie ihn in WordPress einfügen.

  • Vielen Dank. Ich denke, es gibt keine eingebetteten Zeichen (ich verwende unter anderem nicht das Wysiwyg von WordPress). Ich habe versucht, aus Notepad++ UTF-8-Text in WordPress einzufügen, nichts ändert sich.

    – Sanders der Softwareentwickler

    27. Juli 2015 um 15:17 Uhr

  • Was ist, wenn Sie versuchen, Post-Inhalte über eine Ajax-Funktion einzufügen (Aufruf von wp_insert_post)? Auf diese Weise sollten Sie Datenbankprobleme ausschließen können

    – urka_mazurka

    27. Juli 2015 um 17:38 Uhr


  • Danke, @urka_mazurka, ich habe es versucht (als Ergänzung im Fragetext beschrieben)

    – Sanders der Softwareentwickler

    27. Juli 2015 um 22:00 Uhr

Benutzeravatar von Whirlwind
Wirbelwind

Haben Sie versucht, mod_security (über .htaccess) zu deaktivieren?

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

Viele Leute beschweren sich über Probleme beim Speichern langer Posts in WordPress oder Posts, die wegen bestimmter Wörter nicht gespeichert werden können. Das liegt daran, dass WordPress manchmal nicht gut mitspielt mod_security aktiviert. Einige von ihnen lösten dies, indem sie diese Funktion deaktivierten … Einige von ihnen lösten dies, indem sie das WP-Speicherlimit änderten … Vielleicht helfen Ihnen einige davon, Ihr Problem zu lösen (oder es zumindest einzugrenzen).

  • Danke für die Antwort. Ich habe das versucht – nichts hat sich geändert 🙁 Genau, ich habe diese Zeilen nach #END WORDPRESS in die .htaccess des Blogs eingefügt, Apache neu gestartet, versucht, Text zu speichern, und sah wie üblich beschädigt aus.

    – Sanders der Softwareentwickler

    30. Juli 2015 um 16:14 Uhr

  • Ich glaube, diese Regeln müssen kommen Vor Die Regeln von WordPress.

    – rnevius

    30. Juli 2015 um 19:01 Uhr

Ein paar Vorschläge:

* Kopieren / Einfügen niemals von Word nach WordPress.

* Stellen Sie immer sicher, dass Sie unformatierten, sauberen Text einfügen

*Wenn Sie sich nicht sicher sind, können Sie jederzeit in Notepad ++ kopieren / einfügen und dann in WordPress kopieren / einfügen.

*Wenn Sie seltsame Zeichen sehen, könnte dies ein Problem mit der UTF8-Codierung sein. Früher hatten wir dieses Problem, als wir die Site von der Entwicklungsumgebung in die Integrationsumgebung hochgestuft haben. Wir haben es gelöst, indem wir die gesamte .sql-Datenbank in Notepad++ geöffnet haben und zu Encoding -> UTF8 -> Save gegangen sind

Benutzeravatar von Gaurav
Gaurav

Sie müssen die Datei „wp-config.php“ überprüfen, um zu bestätigen, dass der unten geschriebene Code darin vorhanden ist:

define('DB_CHARSET', 'utf8');

Wenn der obige Code in der Datei vorhanden ist und das Problem immer noch auftritt, fügen Sie hinzu dieser Code in der Datei „header.php“ des Themes.

  • Danke, aber es ändert sich nichts

    – Sanders der Softwareentwickler

    28. Juni 2016 um 22:15 Uhr

Benutzeravatar von Buddhika Dombawela
Buddhika Dombawela

Hinzufügen Beitragsautor und Post-Typ für deinen Beitrag

Übergeben Sie hier die Benutzer-ID als post_author (1 ist der erste Benutzer, den wir bei der WordPress-Installation erstellen).

$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,
);

  • Danke, aber es ändert sich nichts

    – Sanders der Softwareentwickler

    28. Juni 2016 um 22:15 Uhr

Sanders der Benutzeravatar des Softwarers
Sanders der Softwareentwickler

Endlich habe ich es gelöst.

All dies #@$@#$@#$ war auf einen Rechtschreibfehler in der sys_temp_dir-Option von php.ini zurückzuführen. Jedes Mal, wenn die PHP-Engine keine temporäre Datei erstellt, wurden die Post-Inhalte mit dieser einzigartigen Technik ohne sichtbare Warnung gestaucht.

1402410cookie-checkWordPress-Post-Text-Korruption

This website is using cookies to improve the user-friendliness. You agree by using the website further.

Privacy policy