Ответ 1
Я быстро поставил это вместе, но для "встроенных стилей" (!) вам понадобится что-то вроде
$text = preg_replace('#(<[a-z ]*)(style=("|\')(.*?)("|\'))([a-z ]*>)#', '\\1\\6', $text);
Я использую php для вывода некоторого богатого текста. Как полностью стирать встроенные стили?
Текст будет вставлен прямо из MS Word или OpenOffice и в него будет использоваться TinyMCE, редактор Rich-Text, который позволит вам добавить в текст базовое форматирование HTML. Однако я хочу удалить встроенные стили в тегах
(см. Ниже), но сохраните теги
.
<p style="margin-bottom: 0cm;">A patrol of Zograth apes came round the corner, causing Rosette to pull Rufus into a small alcove, where she pressed her body against his. “Sorry.” She said, breathing warm air onto the shy man neck. Rufus trembled.</p>
<p style="margin-bottom: 0cm;"> </p>
<p style="margin-bottom: 0cm;">Rosette checked the coast was clear and pulled Rufus out of their hidey hole. They watched as the Zograth walked down a corridor, almost out of sight and then collapsed next to a phallic fountain. As their bodies hit the ground, their guns clattered across the floor. Rosette stopped one with her heel and picked it up immediately, tossing the other one to Rufus. “Most of these apes seem to be dying, but you might need this, just to give them a helping hand.”</p>
Я быстро поставил это вместе, но для "встроенных стилей" (!) вам понадобится что-то вроде
$text = preg_replace('#(<[a-z ]*)(style=("|\')(.*?)("|\'))([a-z ]*>)#', '\\1\\6', $text);
Вот решение preg_replace, полученное из ответа Крозина. Это позволяет атрибуты до и после атрибута стиля, фиксирующего проблему с привязными тегами.
$value = preg_replace('/(<[^>]*) style=("[^"]+"|\'[^\']+\')([^>]*>)/i', '$1$3', $value);
Используйте HtmlPurifier
Вы можете использовать регулярные выражения:
$text = preg_relace('#<(.+?)style=(:?"|\')?[^"\']+(:?"|\')?(.*?)>#si', '<a\\1 \\2>', $text);
Не могли бы вы просто использовать strip_tags и оставить в тегах, которые хотите, например, <p>, <strong>
и т.д.
Почему бы вам просто не перезаписать теги. Таким образом, у вас будут чистые теги без встроенного стиля.
Я нашел этот класс очень полезным для создания атрибутов полосы (особенно там, где сумасшедшее форматирование MS Word по всему тексту):
http://semlabs.co.uk/journal/php-strip-attributes-class-for-xml-and-html
Вы можете использовать: $content = preg_replace ('/style = [^ > ] */', '', $content);
Мне нужно очистить стиль от тегов IMG и решен с помощью этого кода:
$text = preg_replace('#(<img (.*) style=("|\')(.*?)("|\'))([a-z ]*)#', '<img \\2\\6', $text);
echo $text;