Удаление встроенных стилей с помощью php

Я использую php для вывода некоторого богатого текста. Как я могу полностью удалить встроенные стили?

текст будет вставлен прямо из MS Word, или OpenOffice, и в который использует TinyMCE, богатый текстовый редактор, который позволяет добавлять базовое форматирование 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. &ldquo;Sorry.&rdquo; She said, breathing warm air onto the shy man's neck. Rufus trembled.</p>
<p style="margin-bottom: 0cm;">&nbsp;</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. &ldquo;Most of these apes seem to be dying, but you might need this, just to give them a helping hand.&rdquo;</p>

8 ответов


я быстро собрал это вместе, но для "встроенных стилей" (!) вам понадобится что-то вроде

$text = preg_replace('#(<[a-z ]*)(style=("|\')(.*?)("|\'))([a-z ]*>)#', '\1\6', $text);

вот решение preg_replace, которое я получил из ответа Крозина. Это позволяет атрибуты до и после атрибута стиля, исправляющего проблему с тегами привязки.

$value = preg_replace('/(<[^>]*) style=("[^"]+"|\'[^\']+\')([^>]*>)/i', '', $value);

использовать HtmlPurifier


вы можете использовать регулярные выражения:

$text = preg_relace('#<(.+?)style=(:?"|\')?[^"\']+(:?"|\')?(.*?)>#si', '<a\1 \2>', $text);

Не могли бы вы просто использовать strip_tags и оставить в тегах, которые вы хотите, например <p>, <strong> etc?


Почему бы вам просто не переписать теги. Таким образом, у вас будут чистые теги без встроенного стиля.


Я нашел этот класс очень полезным для выполнения атрибутов полосы (особенно там, где есть сумасшедшее форматирование MS Word по всему тексту):

http://semlabs.co.uk/journal/php-strip-attributes-class-for-xml-and-html


вы можете использовать: $content = preg_replace ('/style=[^>]*/', ", $содержание);