WordPress帖子文本损坏

2022-08-30 23:48:29

昨天我开始了一个使用WordPress 4.1的小型私人博客(Windows 7,Apache 2.4,MySQL 5.5,PHP 5.6.1,UTF8,通常是常见的设置)。我开始将我的文章转移到其中;其中有几篇很好,但我发现两篇文章无法正确保存。

当尝试将这些文章另存为帖子时,WordPress会刷新并显示损坏的文本版本。确切的损坏是:文章的中间被删除,而插入几个垃圾字符(例如%D?)而不是它。

我试图将WP更新到当前(4.2.2)版本 - 错误是相同的(更新:4.2.3 - 错误是相同的)。我试图将文章另存为页面而不是帖子 - 错误是相同的。我尝试了标准主题而不是自定义 - 错误是相同的。

看起来“发布”的文章比其他文章长 - 5.2Kb和7.5Kb。我试图看看如果我保存较少的部分会发生什么。虽然保存一个非常短的部分,但它工作正常。如果制作更长的部分,WP会丢失此文本的尾部。如果制作更长的部分,WP开始失去中间部分,如上所述。

目前我不知道如何修复或调试这种情况。有什么建议吗?

==========其他信息===========

我试图在我的博客中执行此代码:

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

?>

当执行时,它使优秀的帖子,因为它应该是(感谢urka_mazurka这样做)。

当我尝试将这篇文章编辑成WP时,它在保存时也变得损坏。此外,当我尝试将此PHP文件编辑为WP(使用编辑主题工具)时,它在保存时也会损坏。

===== 附加信息 2 =====

表排序规则为(显示表状态的结果)wp_postsutf8mb4_unicode_ci

看起来urka_mazurka是最接近的...至少我可以通过发布这些帖子。太糟糕了,我不能向他支付赏金,因为他没有发表任何答案。wp_insert_post


答案 1

根据您的解释,问题似乎出在WordPress核心上,我建议您尝试不同的方法:

  1. 使用wp_insert_post函数插入帖子,但没有内容或“安全”内容(如一个简单的单词)。
  2. 然后使用$wpdb使用真实内容更新帖子。

以下是我将如何做到这一点的片段:

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

如果你没有得到你想要的结果,那么你的php配置或MySQL配置就有问题,除非你愿意尝试一个更不友好的解决方案,并使用$wpdb->query而不是像这样:$wpdb->update

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

请告诉我们。


答案 2

确保您要传输的文章没有嵌入的字符编码。当您尝试从格式化文档(如 Microsoft Word 文档)复制内容时,这是一个常见问题,因为它会在复制文本时保存字符编码信息。

在WordPress WYSIWYG框中,有一个图标可以显示源代码。通过查看此内容,您可能能够发现奇怪的字符编码。

否则,请尝试在文本编辑器中粘贴文章,并在粘贴到WordPress之前将所有文本转换为标准UTF-8编码。


推荐