Regexp для очистки пустых, ненужных тегов HTML - PullRequest
4 голосов
/ 23 мая 2009

Я использую TinyMCE (WYSIWYG) в качестве редактора по умолчанию в одном из моих проектов, и иногда он автоматически добавляет <p>&nbsp;</p> , <p> </p> или divs.

Я искал, но не смог найти хороший способ очистки пустых тегов с помощью регулярных выражений.

Код, который я пытался использовать,

$pattern = "/<[^\/>]*>([\s]?)*<\/[^>]*>/";
$str = preg_replace($pattern, '', $str); 

Примечание: я тоже хочу очистить & nbsp тоже: (

Ответы [ 5 ]

6 голосов
/ 23 мая 2009

Try /<(\w+)>(\s|&nbsp;)*<\/\1>/ вместо. :)

1 голос
/ 23 мая 2009

Это регулярное выражение немного странно, но похоже, что оно может работать. Вы можете попробовать это вместо этого:

$pattern = ':<[^/>]*>\s*</[^>]*>:';
$str = preg_replace($pattern, '', $str);

Очень похоже, хотя.

0 голосов
/ 25 февраля 2014

Попробуйте это:

<([\w]+)[^>]*?>(\s|&nbsp;)*<\/\1>
0 голосов
/ 23 мая 2009

Вы бы хотели, чтобы несколько регулярных выражений были уверены, что вы не исключили другие разыскиваемые элементы одним общим.

Как сказал Бен, вы можете отбросить допустимые элементы с одним общим регулярным выражением

<\s*[^>]*>\s*`&nbsp;`\s*<\s*[^>]*>
<\s*p\s*>\s*<\s*/p\s*>
<\s*div\s*>\s*<\s*/div\s*>
0 голосов
/ 23 мая 2009

Я знаю, что это не то, что вы просили, но после нескольких месяцев TinyMCE, справляясь не только с этим, но и с адом, возникающим в результате того, что пользователи отправляют сообщения непосредственно из Word, я переключился на FCKeditor и не может быть счастливее.

РЕДАКТИРОВАТЬ: На всякий случай неясно, что я говорю, что FCKeditor не вставляет произвольные параграфы там, где он чувствует себя, как плюс, а также справляется с вставленным дерьмом Word из коробки. Возможно, вам поможет мой предыдущий вопрос .

...