Удаление встроенных стилей с помощью php - PullRequest
10 голосов
/ 22 марта 2010

Я использую 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. &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>

Ответы [ 10 ]

27 голосов
/ 23 марта 2010

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

$text = preg_replace('#(<[a-z ]*)(style=("|\')(.*?)("|\'))([a-z ]*>)#', '\\1\\6', $text);
11 голосов
/ 07 декабря 2013

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

$value = preg_replace('/(<[^>]*) style=("[^"]+"|\'[^\']+\')([^>]*>)/i', '$1$3', $value);
5 голосов
/ 22 марта 2010

Использование HtmlPurifier

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

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

$text = preg_relace('#<(.+?)style=(:?"|\')?[^"\']+(:?"|\')?(.*?)>#si', '<a\\1 \\2>', $text);
0 голосов
/ 31 марта 2019

Вы также можете использовать PHP Simple HTML DOM Parser следующим образом:

$html = str_get_html(SOME_HTML_STRING);

foreach ($html->find('*[style]') as $item) {
   $item->style = null;
}
0 голосов
/ 09 января 2019

Мне нужно очистить стиль от тегов img, и я решил этот код:

$text = preg_replace('#(<img (.*) style=("|\')(.*?)("|\'))([a-z ]*)#', '<img \\2\\6', $text);
echo  $text;
0 голосов
/ 05 июня 2015

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

0 голосов
/ 23 марта 2010

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

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

0 голосов
/ 23 марта 2010

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

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

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

...