WordPress опубликовать текст коррупции
Вчера я начал небольшой частный блог, используя WordPress 4.1 (Windows 7, Apache 2.4, MySQL 5.5, PHP 5.6.1, UTF8, обычно общие настройки). Я начал перечислять в него свои статьи; некоторые из них были в порядке, но я нашел две статьи, которые не могут быть сохранены правильно.
При попытке сохранить эти статьи в виде сообщений WordPress обновляет и показывает поврежденную версию текста. Точное повреждение: середина статьи удаляется, в то время как вместо нее вставлены несколько символов мусора (% D? Например).
Я попытался обновить WP до текущей версии (4.2.2) - ошибка такая же (upd.: 4.2.3 - ошибка такая же). Я попытался сохранить статью в качестве страницы вместо пост-ошибки. Я попробовал стандартную тему вместо custom - ошибка такая же.
Похоже, что выпущенные статьи длиннее других - 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
collation - utf8mb4_unicode_ci
(результат СТАТУСА SHOW TABLE)
Похоже, что urka_mazurka были самыми близкими... по крайней мере, я могу публиковать эти сообщения через wp_insert_post
. Жаль, что я не могу адресовать ему щедрость, потому что он не опубликовал никакого ответа.
Ответы
Ответ 1
Наконец-то я решил.
Все это # @[email protected]# [email protected]# $было вызвано ошибкой в php.ini sys_temp_dir. Каждый раз, когда PHP-движок не создает временный файл, содержимое было сжато с использованием этого уникального метода без видимого предупреждения.
Ответ 2
согласно вашему объяснению проблема, похоже, связана с ядром WordPress, я рекомендую вам попробовать другой подход:
- Вставьте сообщение, используя функцию wp_insert_post, но без содержимого или "безопасного" контента, как одно простое слово.
- Затем используйте $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 config или 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"
);
Сообщите нам.
Ответ 3
Убедитесь, что статьи, которые вы передаете, не имеют встроенной кодировки символов. Это обычная проблема при попытке скопировать материал из форматированного документа, такого как документ Microsoft Word, поскольку он сохраняет информацию о кодировке символов при копировании текста.
В поле WordPress WYSIWYG есть значок, показывающий исходный код. Вы можете обнаружить странную кодировку символов, просмотрев это.
Повторите попытку вставки ваших статей в текстовый редактор и конвертирования всего текста в стандартную кодировку UTF-8 перед вставкой в WordPress.
Ответ 4
Вы пытались отключить mod_security (через .htaccess)?
<IfModule mod_security.c>
SecFilterEngine Off
SecFilterScanPOST Off
</IfModule>
Есть много людей, которые жалуются на проблемы, связанные с сохранением длинных сообщений в Wordpress или сообщениями, которые нельзя сохранить из-за определенных слов. Это потому, что иногда Wordpress не будет хорошо играть с включенным mod_security
. Некоторые из них решили это, отключив эту функцию... Некоторые из них решили это, изменив ограничение памяти WP... Возможно, некоторые из них помогут вам решить вашу проблему (или, по крайней мере, сузить ее).
Ответ 5
Несколько предложений:
* Никогда не копируйте/вставляйте из Word в WordPress.
* Обязательно пройдите в неформатированном чистом тексте
* Если вы не уверены, вы всегда можете скопировать/вставить в блокнот ++, а затем скопировать/вставить в wordpress.
* Если вы видите странные символы, это может быть проблемой кодирования UTF8. Раньше у нас была эта проблема при запуске сайта из среды "Среда" в "Интеграционная среда". Мы решили это, открыв всю базу данных .sql целиком в блокноте ++, и перейдем к кодировке → UTF8 → Сохранить
Ответ 6
Вам нужно проверить файл "wp-config.php", чтобы подтвердить, что в нем присутствует код, указанный ниже:
define('DB_CHARSET', 'utf8');
Если приведенный выше код присутствует в файле, и вы все еще получаете проблему, добавьте этот код в файл темы header.php.
Ответ 7
Добавить Post Author и Тип сообщения для вашего сообщения
Здесь передается идентификатор пользователя как 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,
);