Замените атрибут стиля html запросом MySQL - PullRequest
0 голосов
/ 22 марта 2019

Мы находимся в процессе обновления существующего веб-сайта WordPress и импорта сообщений с одного сайта на другой. На старом веб-сайте мы использовали редактор WYSIWYG, и во все посты были встроены стили

Пример:

<p style="margin: 6px 0px; color: rgb(20, 24, 35); font-family: helvetica, arial, 'lucida grande', sans-serif; font-size: 14px; line-height: 19.3199996948242px; background-color: rgb(255, 255, 255);">
    <span style="font-family: helvetica, arial, 'lucida grande', sans-serif; font-size: 14px; letter-spacing: 0.4pt; line-height: 19.3199996948242px;">Content</span>
</p>

Ожидаемый результат:

<p>
    <span>Content</span>
</p>

Теперь я ищу способ удалить тег стиля из элементов HTML. Сам я думал о запросе MySQL, но не могу понять, как в нем preg_replace.

Ответы [ 4 ]

2 голосов
/ 22 марта 2019

Если вы хотите выполнить миграцию на уровне базы данных, я бы порекомендовал добавить новый столбец в вашу таблицу post, чтобы вы могли сначала создать копию ваших старых данных, а затем сравнить результаты сценария миграции. После добавления нового столбца вы можете использовать REGEXP_REPLACE как часть ОБНОВЛЕНИЯ для копирования данных в новый столбец. Возможно, вам придется изменить синтаксис регулярного выражения, чтобы он перехватывал все символы, встречающиеся в разделе «стиль», но это может быть началом:

UPDATE 
  post_table 
SET 
  stripped_text = regexp_replace(original_text, 
  ' style="[[:alnum:][:digit:][:space:];,:\(\)\'\-\.]+"', '') 

Изучите данные и посмотрите, все ли результаты в порядке, повторяйте, пока результат не станет достаточно хорошим. Переименуйте исходный столбец сообщения («original_text» в моем образце) на что-то вроде «orignal_backup», а новый столбец («stripped_text» в моем примере) на имя исходного столбца сообщения.

Дополнительную информацию о классах символов в MySQL REGEX можно найти здесь .

0 голосов
/ 22 марта 2019

Вы находитесь в WordPress, могу ли я предположить, что у вас есть некоторые навыки PHP? Если это так, вы можете использовать что-то вроде simpleXML для сканирования всех страниц и сделать рекурсивный цикл, проходящий по всем дочерним тегам let скажем или. Или вы можете загрузить сценарий Javascript / jQuery , который удаляет все атрибуты стиля при загрузке. Вы могли бы сделать запрос MySQL, но я думаю, что это будет более рискованным. С simpleXML и подходом Javascript вы можете ограничить область удаления. При поиске и замене в MySQL он будет неограниченным как в DOM страницы, так и в страницах.

Я не очень хорошо разбираюсь в Regexp, но, может быть, если это то, что вы хотите, посмотрите здесь Как заменить регулярное выражение в MySQL?

0 голосов
/ 22 марта 2019

Важно ленивый квантификатор: style="[\d\D]*?"

В MySQL вам потребуется добавить дополнительную обратную косую черту: style="[\\d\\D]*?"

0 голосов
/ 22 марта 2019

На самом деле это легко.Вы можете установить стиль по умолчанию и после получения его из переменной обновления mysql:

<?php

$NewStyle=' style="background-color: red;"';

//your query to get style

$NewStyle=' style="'.$row['style'].'"';// if some query conditions - example: background-color: blue 

<div '.$NewStyle.'></div>

?>

Редактировать: Я действительно не правильно прочитал и пропустил, что речь шла о WP.Поскольку это может все еще помочь однажды, я оставлю этот ответ открытым.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...