Как удалить BBcode из MySQL базы WordPress

Опубликовано: 24 июня 2018
Раздел(ы): MySQL
Просмотры: 1711
Комментарии: 2

В этой статье я расскажу как удалить 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, поэтому заранее побеспокойтесь о логине и пароле для доступа:

Как удалить BBcode из MySQL базы WordPress

Нужно перейти по ссылке «SQL»:

Как удалить BBcode из MySQL базы WordPress

И выполнить следующие запросы (обратите внимание на кавычки, они разные):

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 стандарту.

Обсуждение (комментарии к статье)

Добавить комментарий

Ваш адрес email не будет опубликован. Обязательные поля помечены *

Нажимая кнопку "Отправить" Вы даёте свое согласие на обработку введенной персональной информации в соответствии с Федеральным Законом №152-ФЗ от 27.07.2006 "О персональных данных", на условиях и для целей определенных политикой конфиденциальности сайта.
© Юрий Рассадников, 2011 - 2024
uptime узнать
Домен : reg.ru
Хостинг : adman.com
SQL - 6 | 0,198 сек. | 8.39 МБ