Warning: Cannot use a scalar value as an array in /home/admin/public_html/forum/include/fm.class.php on line 757

Warning: Invalid argument supplied for foreach() in /home/admin/public_html/forum/include/fm.class.php on line 770
Форумы портала PHP.SU :: Версия для печати :: Подскажите, как убрать </b><b> и <h1></h1> ?
Форумы портала PHP.SU » PHP » Регулярные выражения » Подскажите, как убрать </b><b> и <h1></h1> ?

Страниц (2): [1] 2 »
 

1. LShark - 07 Января, 2013 - 19:52:28 - перейти к сообщению
После частичной очистки хтмл-страницы, созданной ВОРДОМ (да, не я такой маразм придумал), в файле остаются такие варианты тегов:

CODE (html):
скопировать код в буфер обмена
  1. Обычный текст <b>жирный текст </b><b>еще текст жирный </b><b>еще жирный текст</b> обычный текст

Понятно, что идущие друг за другом </b><b> - бессмысленны. Так же как и </i><i>

Аналогичное изображение выдаст и такой текст:
CODE (html):
скопировать код в буфер обмена
  1. Обычный текст <b>жирный текст еще текст жирный еще жирный текст</b> обычный текст


Понятно, что получается короче. Пытаюсь использовать:

чего то не работает.

Это РАЗ.

Теперь ДВА.

Аналогично - в документе встречаются такие теги:
CODE (html):
скопировать код в буфер обмена
  1. <h1></h1>Какой то текст<center></center>
и так далее. Понятно, что проку от таких тегов никакого.

Еще варианты:
CODE (html):
скопировать код в буфер обмена
  1. <h1 align=center></h1>


CODE (html):
скопировать код в буфер обмена
  1. Но необходимо исключить <p></p> и аналогичные ему <p align=center></p>


Подскажите регулярки для зачистки по этому типу?
2. broshurkaplus - 07 Января, 2013 - 19:57:41 - перейти к сообщению
если "ненужное" заранее известно. то быть может
перечислить их в массиве и str_replace
3. LShark - 07 Января, 2013 - 20:00:26 - перейти к сообщению
Это и так понятно. Мне нужны как раз регулярки для прегреплейса.

Увы, регулярки - самое слабое мое место Недовольство, огорчение
4. broshurkaplus - 07 Января, 2013 - 20:06:34 - перейти к сообщению
может так
CODE (htmlphp):
скопировать код в буфер обмена
  1. $получаем=str_replace("не-нужный-тег","", $то-что-чистим);
5. EuGen - 07 Января, 2013 - 20:07:34 - перейти к сообщению
Пример:
PHP:
скопировать код в буфер обмена
  1. $sText="some <b>bold</b><b> text</b> with empty <h1></H1> header";
  2.  
  3. $rgEmptyTags=array('h1', 'b', 'i');
  4. array_map(function($sTag) use (&$sText)
  5.         {
  6.                 $sText=preg_replace(array(
  7.                         '/\<'.$sTag.'[^\<\>]*\>\<\/'.$sTag.'\s*\>/i',
  8.                         '/\<\/'.$sTag.'\>\<'.$sTag.'\>/i'), '', $sText);
  9.         }, $rgEmptyTags);
  10. //var_dump($sText);

- однако в общем случае закрытие тега и его открытие вновь не всегда бессмысленно (ведь у открытого тега могут быть индивидуальные атрибуты). Поэтому в примере заменяется только пара закрывающего-открывающего тега без атрибутов.
6. LShark - 07 Января, 2013 - 20:18:14 - перейти к сообщению

Это для первого варианта. Убирает все теги в тегах.
7. EuGen - 07 Января, 2013 - 20:19:32 - перейти к сообщению
Я предположил, что нужно убрать лишь заданные теги, и тогда их придется перечислять.
8. broshurkaplus - 07 Января, 2013 - 20:25:08 - перейти к сообщению
а я понял что вы хотите, сразу не вкурил...
5раз переписывал...

если изначально текст корректен, в смысле все открытые теги закрыты, то ищите стоящие рядом, тоесть подряд </b><b> и режте себе

CODE (htmlphp):
скопировать код в буфер обмена
  1. $получаем=str_replace("</b><b>","", $то-что-чистим);


правильно я понял вас?

ну и/или в массиве перечислите все ненужное
9. LShark - 07 Января, 2013 - 20:27:08 - перейти к сообщению
Согласен. Но тут все сложнее и проще.
Первый пример - все проще (я уже указал и проверил). На некоторых документах это экономит до 1,5 килобайт, хоть и мелочь, но приятно.

А вот со вторым вариантом... Буду думать, так как заранее что то не могу предположить, какие теги натыкает тупой ворд.
10. broshurkaplus - 07 Января, 2013 - 20:34:50 - перейти к сообщению
понятно суть - удалить/вырезать, но непонятна общая картина задачи

так вы если парсите контент так сохраняйте его как то без форматирования...
просто не очень понятно кто будет специально в ворде теги набирать.
перечислите в массиве все возможные/предполагаемые теги, а если появился другой, так сообщение какое себе, или поле в таблице и туда записывать, а потом ручками удалил и добавил ето в масив, а тож кто его знает какие там теги могут образоваться..
11. LShark - 07 Января, 2013 - 20:42:51 - перейти к сообщению
broshurkaplus пишет:
так вы если парсите контент так сохраняйте его как то без форматирования...
просто не очень понятно кто будет специально в ворде теги набирать.

Файл - Сохранить как - Html-страница

И увидишь, сколько дерьма насохраняет тебе ворда даже в самом простом документе. У меня очистка происходит так, что после нее получается ПОЧТИ чистый документ. С 1,5 мегабайт после очистки он становится в 600 килобайт. Но в нем все еще остаются такие вот (указанные в первом посте) теги, которые бесполезны и мертвы. Их много и разных, писать под них аррэй - проще сразу все теги переписать по очереди.

Пока чую, что надо сохранять только </p><p> - это значимые теги (отображаются как разрыв абзацев). Все остальные такие - лишь результат маразма ворда и индусов из мелкософта.

Да, и не надо писать, что сохранять вордом - бред. Не я себе заказ пишу. А старым хрычам дай бог, научиться из ворда сохранять, не то, чтобы писать самим...
12. DelphinPRO - 07 Января, 2013 - 20:43:52 - перейти к сообщению
для варианта </b><b> (для любых тегов)
PHP:
скопировать код в буфер обмена
  1. $string = preg_replace('~</[a-z0-9]+><[a-z0-9]+>~Usi', '', $string);


для пустых тегов (для любых тегов)
<b></b>
<h1 align=center></h1>
PHP:
скопировать код в буфер обмена
  1. $string = preg_replace('~<[a-z0-9]+\s*[^<>]*></[a-z0-9]+>~Usi', '', $string);


ps регулярки не проверял, составил "на глазок" ;)
13. broshurkaplus - 07 Января, 2013 - 20:50:13 - перейти к сообщению
ну так а я о чем Улыбка
Файл - Сохранить как - Html-страница
сконвертировать в ворд и имеем полный набор всего...

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

но это уже не к теме.
14. LShark - 07 Января, 2013 - 20:59:03 - перейти к сообщению
DelphinPRO пишет:
для пустых тегов (для любых тегов)

Все хорошо, но удаляется так же и <p></p> и <p align=center></p>

Как бы их исключить из очистки, все таки они явно влияют на отображение документа и их удаление портит картину.
(Добавление)
Хотя что я курю, в первом выражении заменить a-z0-9 на a-oq-z0-9
(Добавление)
broshurkaplus - ради всего святого, научись не набивать посты, а отвечать на вопросы, если можешь. Как DelphinPRO, например.
15. broshurkaplus - 07 Января, 2013 - 21:20:26 - перейти к сообщению
дерзаешь?
дерзай

 

Powered by ExBB FM 1.0 RC1