WordPress发布文本损坏

时间:2015-07-21 19:00:45

标签: php windows wordpress apache

昨天我开始使用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 - 错误是相同的)。我试图保存文章作为页面而不是post - 错误是相同的。我尝试了标准主题而不是自定义 - 错误是一样的。

看起来好像发布了'文章比其他文章更长 - 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_posts排序规则为utf8mb4_unicode_ci(SHOW TABLE STATUS的结果)

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

7 个答案:

答案 0 :(得分:1)

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

  1. 使用 wp_insert_post 功能插入帖子,但没有内容或“安全”内容,就像一个简单的单词。
  2. 然后使用$wpdb更新包含真实内容的帖子。
  3. 以下是我将如何做的剪辑:

      $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而不是{{1}像这样:

    $wpdb->update

    告诉我们。

答案 1 :(得分:0)

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

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

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

答案 2 :(得分:0)

您是否尝试停用mod_security(through .htaccess)?

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

有很多人抱怨在Wordpress中保存长帖的问题,或者由于某些单词而无法保存的帖子。这是因为有时Wordpress无法在启用mod_security的情况下发挥出色。他们中的一些人通过禁用此功能解决了这个问题...他们中的一些人通过更改WP内存限制来解决这个问题......也许其中一些可以帮助您解决问题(或至少缩小范围)。

答案 3 :(得分:0)

一些建议:

*从不从Word复制/粘贴到WordPress。

*始终确保以未格式化的干净文字过去

*如果您不确定,可以随时复制/粘贴到记事本++中,然后复制/粘贴到wordpress中。

*如果您看到奇怪的字符,那可能是UTF8编码问题。在将站点从Dev Environment冒泡到Integration Environment时,我们曾经遇到过这个问题。我们通过在notepad ++中打开.sql整个数据库来解决它,并转到Encoding - &gt; UTF8 - &gt;保存

答案 4 :(得分:0)

您需要检查“wp-config.php”文件以确认其中包含以下代码:

define('DB_CHARSET', 'utf8');

如果文件中存在上述代码但您仍然遇到问题,请在主题的'header.php'文件中添加this code

答案 5 :(得分:0)

为您的帖子添加发布作者帖子类型

此处将用户ID传递为post_author(1是我们在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,
);

答案 6 :(得分:0)

最后我解决了它。

所有这些#@ $ @#$ @#$是因为拼错到php.ini的sys_temp_dir选项。每当PHP引擎无法创建临时文件时,使用这种独特的技术就会压缩帖子内容而没有任何明显的警告。