Как удалить BBcode из MySQL базы WordPress
В этой статье я расскажу как удалить BBcode, а точнее заменить их на соответствующие HTML теги во всех статьях сайта на WordPress. С небольшими изменениями этот способ можно применить к любому сайту использующему базу данных MySQL.
BBcode — это разметка (язык разметки) для форматирования и оформления текста. Используются теги заключенные в квадратные скобки подобные HTML тегам. Перед выводом страницы посетителю движок сайта преобразует BBcode в соответствующие HTML теги. BBCode был придуман с целью предоставить более простой, безопасный и ограниченный по сравнению с HTML способ форматирования сообщений.
(Информация из Википедии)
Почему мне не нравится BBcode
Когда я только начал вести этот блог, то при написании статей я активно использовал BBcode, так как это упрощало и ускоряло форматирование и оформление текста. Но со временем я понял, что BBcode — это «зло». Так как во-первых используемые теги являются нестандартными, то есть не понимаются браузерами без предварительного преобразования в HTML. Что лишает ваши тесты совместимости, например при переносе статьи с одного сайта на другой, вам придется переносить и функцию декодирования BBcode.
Во-вторых большинство тегов BBcode просто копируют соответствующие HTML теги и никак не ускоряю набор и оформление текстов. Например BBcode [b]Текст[/b]
соответствует HTML тегу <b>Текст</b>
. Как видите разница только в скобках: квадратные или угловые.
Но конечно есть у BBcode и плюсы. Например сейчас вместо HTML тега <b>Текст</b>
рекомендуется использовать тег <strong>Текст</strong>
. И в случае использования BBcode вам достаточно один раз изменить код вывода в функции преобразования BBcode, а не исправлять все страницы на сайте.
Полезные теги BBcode
Я начал использовать BBcode из-за двух самых крутых на мой взгляд тегов, это коды для изображений и ссылок.
HTML | BBcode | |
---|---|---|
Тег изображения | <img src="http://sitename.tld/img.png"> |
[img]http://sitename.tld/img.png[/img] |
Тег ссылки | <a href="http://sitename.tld/">http://sitename.tld/</a> |
[url]http://sitename.tld/[/url] |
Вот они действительно упрощают написание.
Перед тем как воспользоваться рекомендациями из этой статьи и вносить любые изменения, пожалуйста, сделайте резервную копию вашей MySQL базы данных. Например так или из phpMyAdmin
Как удалить простые BBcode из MySQL базы WordPress
Под простыми тегами BBcode я имею ввиду те, которые копируют соответствующие HTML теги и у них совпадает синтаксис (структура) написания. Например [b]..[/b]
и <strong>..</strong>
.
Заменять BBcode я буду сразу в базе данных MySQL WordPress, чтобы в дальнейшем можно было отказаться от плагина преобразования. Для выполнения этой процедуры понадобится phpMyAdmin, поэтому заранее побеспокойтесь о логине и пароле для доступа:
Нужно перейти по ссылке «SQL»:
И выполнить следующие запросы (обратите внимание на кавычки, они разные):
UPDATE `wp_posts` SET `post_content` = REPLACE(`post_content`, '[b]', '<strong>'); UPDATE `wp_posts` SET `post_content` = REPLACE(`post_content`, '[/b]', '</strong>');
Этим запросом мы во всех записях WordPress заменяем BBcode тег [b]..[/b]
на соответствующий ему <strong>..</strong>
. Содержимое тегов при этом остается неизменным.
Аналогично нужно поступить и с другими простыми тегами BBcode которые вы используете на своем сайте.
Подробнее о массовой замене текста в базе данный MySQL рекомендую почитать здесь — https://moonback.ru/page/mysql-replace
Замена сложных BBcode в базе данных MySQL на WordPress
Сложные теги BBcode, такие как [img]...[/img]
или [url]...[/url]
нельзя исправить простой заменой на HTML тег. Нужно использовать и преобразовывать содержимое тегов.
В PHP есть замечательная функция для преобразования по шаблону preg_replace, которая выполняет поиск и замену по регулярному выражению. Процедура преобразования BBcode для тега [img]...[/img]
с помощью preg_replace выглядит следующий образом:
$content = preg_replace('|\[img(.*?)](.*?)\[/img]|si','<img src="\\2" alt="\\1" title="\\1">', $content);
Эквивалент preg_replace для MySQL
Для преобразования по регулярному выражению в MySQL базе понадобится функция REGEXP_REPLACE.
Функция regexp_replace работает не во всех версиях MySQL и MariaDB. В MySQL поддержка данной функции заявлена начиная с версии 8, я же в своих экспериментах при написании статьи использовал MariaDB 10.
Для преобразования BBcode тегов [img]...[/img]
и [url]...[/url]
я использовал следующий MySQL запрос:
UPDATE `wp_posts` SET `post_content` = REGEXP_REPLACE(`post_content`, '\\[img(.*?)\\](.*?)\\[\\/img\\]', '<img src="\\2" alt="\\1" title="\\1">'); UPDATE `wp_posts` SET `post_content` = REGEXP_REPLACE(`post_content`, '\\[url\\](.*?)\\[\\/url\\]', '<a href="\\1">\\1</a>'); UPDATE `wp_posts` SET `post_content` = REGEXP_REPLACE(`post_content`, '\\[url=(.*?)\\](.*?)\\[\\/url\\]', '<a href="\\1">\\2</a>');
Обратите внимание на синтаксис, квадратные скобки нужно экранировать символом двойной обратной косой черты (обратная дробь, обратный слеш) иначе они работают как регулярные выражения.
Выводы
После использования вышеописанных замен я очистил базу данных MySQL от BBcode тегов. Что конечно не ускорило работу сайта, но позволило избавиться от еще одного WordPress плагина и привело содержимое страниц к HTML стандарту.
Очень полезная информация
Спасибо тебе, добрый человек! Очень помогло!