Удалить все идентификаторы, классы, стили из сообщений WordPress с помощью sql

Я пытаюсь найти способ очистить старые сообщения из базы данных WordPress с помощью команды sql.

UPDATE `wpw8_posts` SET `post_content` = REGEXP_REPLACE(`post_content`, '<span id = ".*?" class = ".*?" style = ".*?">.*?</span>', '<span>.*?</span>');
UPDATE `wpw8_posts` SET `post_content` = REGEXP_REPLACE(`post_content`, '<h2 id = ".*?" class = ".*?" style = ".*?">.*?</h2>', '<h2>.*?</h2>');
UPDATE `wpw8_posts` SET `post_content` = REGEXP_REPLACE(`post_content`, '<p id = ".*?" class = ".*?" style = ".*?">.*?</p>', '<p>.*?</p>');

Что мне нужно, так это найти и удалить любой случайный стиль, идентификатор или класс, чтобы убедиться, что код очищен.

Существующий:

<span id = "geruhgk" class = "fkhdge" style = "gjfjgr">content</span>
<p class = "fkhdge" style = "gjfjgr" id = "geruhgk">content</p>
<h2 class = "fkhdge" id = "geruhgk" style = "gjfjgr">content</h2>

Ожидал:

<span>content</span>
<p>content</p>
<h2>content</h2>

Я попробовал следующую команду sql:

UPDATE `wp_posts` SET `post_content` = REGEXP_REPLACE(post_content,'<div class = "(?s)(.*?)">(?s)(.*?)</div>','<div>(?s)(.*?)</div>')

Это не сработало. Я не знаю, как написать REGEXP. Что мне нужно отредактировать для поиска, например, случайных классов, идентификаторов или стилей, а также как искать и удалять старые идентификаторы, классы, стили для всех сообщений в базе данных WordPress.

Разбор HTML с помощью регулярных выражений немного сложен, и я не знаю хорошего решения вашей проблемы. Я бы предложил написать PHP-скрипт и вместо этого использовать библиотеку парсера HTML. Вы можете использовать $wpdb или внутренние функции wordpress get_post/s и update_post для получения и обновления содержимого сообщений.

dweipert 30.04.2023 22:26

из php он может сломать sute с сообщениями, а затем 75k, так что лучше с mysql, может ли тот же помочь с этим

ẪĦmẻḓ MøĦẫmẻḓ 01.05.2023 08:04

Привет @ẪĦmẻḓMøĦẫmẻḓ Пожалуйста, посмотрите мой комментарий здесь и дайте мне знать, если это поможет. Спасибо.

kofeigen 12.05.2023 06:40

404 Not Found _ Пожалуйста, прочтите команду sql

ẪĦmẻḓ MøĦẫmẻḓ 13.05.2023 17:48

ОБНОВЛЕНИЕ wp_posts НАБОР post_content = REGEXP_REPLACE( post_content, '/<span(.?)((id=[^ ]+|class=[^ ]+|style=[^ ]+)\s)+(.?)\> (.?)</span\>/', '<span$1$4>$5</span>'); нужно войти в систему, чтобы показать код, протестировать и сказать вам

ẪĦmẻḓ MøĦẫmẻḓ 13.05.2023 17:50

я пробую это (ОБНОВЛЕНИЕ wpw8_posts SET post_content = REGEXP_REPLACE( post_content, '/<oo(.?)((id=[^ ]+|class=[^ ]+|style=[^ ]+)\s)+(. ?)\>(.?)</oo\>/', '<oo$1$4>$5</oo>');) ничего не меняется с постом <oo id = "gduhu uhcuhc gciuhiu" class = " hdfkjhgk hdfkjghk" style = "color:red"></oo>, чтобы протестировать < 0 затронутых строк. (Запрос занял 3,0054 секунды.)

ẪĦmẻḓ MøĦẫmẻḓ 13.05.2023 17:59

пожалуйста, помогите с этим кодом, который не работает UPDATE wpw8_posts SET post_content = REGEXP_REPLACE( post_content, '<oo(.?)((id=[^ ]+|class=[^ ]+|style=[^ ]+)\s) +(.?)\>(.?)</oo\>', '<oo$1$4>$5</oo>');

ẪĦmẻḓ MøĦẫmẻḓ 16.05.2023 01:42
Освоение архитектуры микросервисов с Laravel: Лучшие практики, преимущества и советы для разработчиков
Освоение архитектуры микросервисов с Laravel: Лучшие практики, преимущества и советы для разработчиков
В последние годы архитектура микросервисов приобрела популярность как способ построения масштабируемых и гибких приложений. Laravel , популярный PHP...
Как построить CRUD-приложение в Laravel
Как построить CRUD-приложение в Laravel
Laravel - это популярный PHP-фреймворк, который позволяет быстро и легко создавать веб-приложения. Одной из наиболее распространенных задач в...
Освоение PHP и управление базами данных: Создание собственной СУБД - часть II
Освоение PHP и управление базами данных: Создание собственной СУБД - часть II
В предыдущем посте мы создали функциональность вставки и чтения для нашей динамической СУБД. В этом посте мы собираемся реализовать функции обновления...
Документирование API с помощью Swagger на Springboot
Документирование API с помощью Swagger на Springboot
В предыдущей статье мы уже узнали, как создать Rest API с помощью Springboot и MySql .
Роли и разрешения пользователей без пакета Laravel 9
Роли и разрешения пользователей без пакета Laravel 9
Этот пост изначально был опубликован на techsolutionstuff.com .
Как установить LAMP Stack - Security 5/5 на виртуальную машину Azure Linux VM
Как установить LAMP Stack - Security 5/5 на виртуальную машину Azure Linux VM
В предыдущей статье мы завершили установку базы данных, для тех, кто не знает.
0
7
60
1
Перейти к ответу Данный вопрос помечен как решенный

Ответы 1

Ответ принят как подходящий

MariaDB использует символ обратной косой черты (\), а не знак доллара ($) в качестве символа обратной ссылки регулярного выражения. Я предполагаю, что веб-хост, который вы используете с phpMyAdmin, использует базу данных MariaDB. Если это правда, вы можете попробовать это:

UPDATE `wpw8_posts`
SET `post_content` = REGEXP_REPLACE(`post_content`, '<(span|p|h2) ((id|class|style) = "[^>]+")+', '<\\1');

Вы можете добавить множество имен HTML-тегов в список span, p и h2, чтобы обновить несколько тегов.

спасибо, мне нужно больше тестов, потому что html-кода много, поэтому я не знаю, если что-то пошло не так, если я использую его для 70 000 сообщений.

ẪĦmẻḓ MøĦẫmẻḓ 17.05.2023 08:12

я не тестирую UPDATE wpw8_posts SET post_content = REGEXP_REPLACE(post_content, '<(span|p|h1|h2|h3|h4|h5|h6|strong|i|em|dd|dt|code|small|vid‌​eo|col |colgroup|pre|‌​hr|br|ul|li|ol|table‌​|tbody|tr|td|th|thea‌​d|tfoot|iframe|img|a‌​) ((id|class|style|dir |data-aa-component|alt|width|height|titl‌​e) = "[^>]+")+', '<\\1'); но нужно больше времени для большего количества тестов

ẪĦmẻḓ MøĦẫmẻḓ 17.05.2023 08:14

окончательный код для тех, у кого такая же проблема ОБНОВЛЕНИЕ wpw8_posts SET post_content = REGEXP_REPLACE(post_content, '<(span|p|h1|h2|h3|h4|h5|h6|strong|i|em|dd|dt|code|small|vid‌ ​eo|col|colgroup|pre|‌​hr|br|ul|li|ol|table‌​|tbody|tr|td|th|thea‌​d|tfoot|iframe|img|a‌​) ((id|class |style|dir|data-aa-component|alt|width|height|titl‌​e|rowspan|colspan|da‌​ta-row|itemrop|item‌​scope|itemtype) = "[^>‌​]+") +', '<\\1'); спасибо @kofeigen

ẪĦmẻḓ MøĦẫmẻḓ 17.05.2023 13:48

Другие вопросы по теме