Возможно ли сделать такие запросы-замены в таблице?
Есть таблица, скажем catetory_text в ней в записях в поле value html контент. В этом контенте имееется множество ссылок. Необходимо:
1. Найти все ссылки, в которых есть inline css и удалить эти inline css. Т.е. если между тегами - <a и a>имеется вхождение style="тут что-то" то удалить подстроку начиная со style=" и заканчивая закрывающимися ".
2. Проверить все ссылки на наличие-отсутствие аттрибута class:
2.1. Первым делом удалить если имеется старый класс - т.е. по всему value, если имеется вхождение "my-class" заменить эту подстроку на "".
2.2. Если имежду тегами - <a и a> нет вхождения class="тут что-то", то добавить подстроку class="new-my-class" сразу же после открывающего тега и пробела - т.е. после <a'тут пробел' class="new-my-class".
2.3. Если между тегами - <a и a> имеется вхождение class="тут что-то" то после первых кавычек добавить подстроку new-my-class и пробел, т.е. после class="new-my-class'тут пробел'.
Ну я как-то не вижу особых проблем. Во всех описанных случаях можно даже просто строковыми функциями обойтись, ну или использовать регулярки.
Главное - строго и без ошибок построить последовательность шаблонов и критериев.
Хотя я, конечно, согласен с ответом, который дал Алексей Уколов, ибо стопудово в твоём HTML будет вперемешку то символы, то entities, а MySQL никаких преобразований сам выполнять не станет.
стопудово в твоём HTML будет вперемешку то символы, то entities, а MySQL никаких преобразований сам выполнять не станет.
Не совсем понял, что имеется в виду - если что в текстах т.е. в html есть вхождения как <a так и <a, то да, такое есть и я так понял что нужный запрос нужно просто продублировать, один раз с <a </a> и второй раз с <a.
Хотя я, конечно, согласен с ответом, который дал Алексей Уколов,
Не понял, какой ответ дал куратор тега - комментарий вижу, ответ нет.
Тем более, что эту логику, наверняка, надо применять и к будущим записям тоже.
На комментарий ответил, ничего повторно использовать не нужно будет, единоразовые операции.
Если речь о ответе, что легче написать скрипт, то я, простите, не понимаю, чем легче - скрипт на php будет соединяться с базой и выполнять нужный мне sql запрос - этого запроса так или иначе не избежать. Если бы это нужно было бы регулярно делать, то тогда имело бы смысл завернуть запросы в скрипт. А так ведь это мне ничего не упростит.
Ну да ладно. По поводу "особых проблем".
У меня только с 2.1. нет проблем -
UPDATE `category_text` SET `value` = REPLACE(`value`, "new-my-class", "");
С остальными без шаблонов или регэкспов не обойтись, а тут у меня затык, к сожалению.
lagudal, смысл в том, что в скрипте этот HTML можно будет корректно распарсить готовыми библиотеками, причесать и записать обратно. А в SQL это будет увешанный граблями колхоз из замен и регулярок.
Adamos,
Я примерно понял, что имеете в виду - я делаю средствами sql выборку только тех записей, в которых в value содержатся ссылки, потом обрабатываю как мне надо средствами php и потом обновляю таблицу с новыми value.
И это действительно будет легче? Быстрее? Корректнее?
Ну хорошо. Вот маленький пример одного value, вытащено по select
SELECT * FROM `category_text` WHERE `value` LIKE '%<a%';
<div class="mkFlex1__details" style="border: 1px solid #dadfe6 !important;background: #ffffff !important;">&#9432; <strong>Eigenschaften von Etiketten extra stark haftend:</strong>
<ul class="checklist-blue" style="padding-bottom: 0px !important;"><li>Extrem stark haftende Etiketten auch auf schwierigen Oberflächen</li><li>Viele Formate auf Rolle oder Bogen</li><li>Bedruckbar im Thermotransfer- bzw. Laserdrucker</li></ul></div>
</div></div>
Как видно, в этом html примере одна ссылка, в которой есть инлайн css, который нужно удалить, нет классов, значит нужно добавить нужный.
Насколько проще и как это будет обработано php?
lagudal, не вижу в этой каше ни одной ссылки. Если у вас там действительно вот такое содержимое, которое корректным HTML без магии не сделаешь - нет никакой разницы, чем его обрабатывать. Не испортишь.
А вот если хочется навести порядок - тут пых предоставит html_entity_decode, DOM и фокусы типа "вместо белого инлайн бэкграунда добавим элементу класс 'bg-white'".
Заменами в образце
И еще лучше сразу перегонять содержимое в DOM-Объект и производить поиск и замену по структуре DOM.
Потом выгрузить обратно в текстовый вид HTML.
А то замучаетесь писать регулярки на атрибуты, которые идут в произвольном порядке. С DOM процесс всегда предсказуем.