Это та же проблема, что была задана здесь в 2012 году, на которую не было ответа:
Когда я нажимаю ввод в TINYMCE, он появляется для ввода пустых тегов абзаца, например:
<p> </p>
Я хотел удалить их перед сохранением данных в таблицу MySQL.
Поэтому я попробовал простое исправление:
$post_content = str_replace('<p> </p>', '', $content_from_mce);
А также:
$post_content = str_replace('<p> </p>', '', $content_from_mce);
Однако они не работают (например, не заменяют явно пустые теги абзаца).
Если я сделаю это:
$foo = utf8_encode($post_content);
И затем проверьте $ foo: это показывает как:
<p>Â </p>
Так что на самом деле это не пустой тег абзаца, но я не могу понять, как удалить эти блоки текста.
Я также пробовал эти версии (не все одновременно — я имею в виду в разных сериях …)
$post_content = str_replace('<p>Â </p>','',$post_content);
$post_content = preg_replace('~<p>\s*<\/p>~i','',$post_content);
$post_content = preg_replace('#<p> </p>#i','<p></p>', $post_content);
$post_content=str_replace("/<p> <\/p>/","",$post_content);
Но никто из них не работает.
Я понял это — я использую HTMLPurifier чтобы убедиться, что размещенный контент от TinyMCE в порядке.
После того, как $ post_content прошел через HTMLPurifier, он содержит этот забавный символ между тегами абзаца.
Поэтому, если я сделаю замену перед тем, как положить $ post_content через HTMLPurifier, все будет хорошо:
$config = HTMLPurifier_Config::createDefault();
$purifier = new HTMLPurifier($config);
// get contents of "post_content" field
$post_content = $_POST['post_content'];
// remove blank paragraph lines
$post_content = str_replace('<p> </p>','',$post_content);
// now put $post_content through HTMLPurifier
$post_content = $purifier->purify($post_content);
Других решений пока нет …