昨天我开始使用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
发布这些帖子。太糟糕了,我无法向他表达赏金,因为他没有公布任何答案。
答案 0 :(得分:1)
根据您的解释,问题似乎与WordPress核心有关,我建议您尝试不同的方法:
以下是我将如何做的剪辑:
$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引擎无法创建临时文件时,使用这种独特的技术就会压缩帖子内容而没有任何明显的警告。