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

Warning: Invalid argument supplied for foreach() in /home/admin/public_html/forum/topic.php on line 737
Форумы портала PHP.SU :: Подскажите, как убрать </b><b> и <h1></h1> ?

 PHP.SU

Программирование на PHP, MySQL и другие веб-технологии
PHP.SU Портал     На главную страницу форума Главная     Помощь Помощь     Поиск Поиск     Поиск Яндекс Поиск Яндекс     Вакансии  Пользователи Пользователи


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

> Без описания
LShark
Отправлено: 07 Января, 2013 - 19:52:28
Post Id



Частый гость


Покинул форум
Сообщений всего: 240
Дата рег-ции: Нояб. 2012  


Помог: 1 раз(а)




После частичной очистки хтмл-страницы, созданной ВОРДОМ (да, не я такой маразм придумал), в файле остаются такие варианты тегов:

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. Но необходимо исключить <p></p> и аналогичные ему <p align=center></p>


Подскажите регулярки для зачистки по этому типу?

(Отредактировано автором: 07 Января, 2013 - 19:58:07)



-----
Истина прежде всего в том, что...
 
 Top
broshurkaplus
Отправлено: 07 Января, 2013 - 19:57:41
Post Id



Посетитель


Покинул форум
Сообщений всего: 354
Дата рег-ции: Янв. 2011  
Откуда: Пружаны Бресткая обл. Беларусь


Помог: 2 раз(а)




если "ненужное" заранее известно. то быть может
перечислить их в массиве и str_replace
 
 Top
LShark
Отправлено: 07 Января, 2013 - 20:00:26
Post Id



Частый гость


Покинул форум
Сообщений всего: 240
Дата рег-ции: Нояб. 2012  


Помог: 1 раз(а)




Это и так понятно. Мне нужны как раз регулярки для прегреплейса.

Увы, регулярки - самое слабое мое место Недовольство, огорчение


-----
Истина прежде всего в том, что...
 
 Top
broshurkaplus
Отправлено: 07 Января, 2013 - 20:06:34
Post Id



Посетитель


Покинул форум
Сообщений всего: 354
Дата рег-ции: Янв. 2011  
Откуда: Пружаны Бресткая обл. Беларусь


Помог: 2 раз(а)




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

(Отредактировано автором: 07 Января, 2013 - 20:07:51)

 
 Top
EuGen Администратор
Отправлено: 07 Января, 2013 - 20:07:34
Post Id


Профессионал


Покинул форум
Сообщений всего: 9095
Дата рег-ции: Июнь 2007  
Откуда: Berlin


Помог: 707 раз(а)




Пример:
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);

- однако в общем случае закрытие тега и его открытие вновь не всегда бессмысленно (ведь у открытого тега могут быть индивидуальные атрибуты). Поэтому в примере заменяется только пара закрывающего-открывающего тега без атрибутов.


-----
Есть в мире две бесконечные вещи - это Вселенная и человеческая глупость. Но насчет первой .. я не уверен.
 
 Top
LShark
Отправлено: 07 Января, 2013 - 20:18:14
Post Id



Частый гость


Покинул форум
Сообщений всего: 240
Дата рег-ции: Нояб. 2012  


Помог: 1 раз(а)





Это для первого варианта. Убирает все теги в тегах.

(Отредактировано автором: 07 Января, 2013 - 20:36:15)



-----
Истина прежде всего в том, что...
 
 Top
EuGen Администратор
Отправлено: 07 Января, 2013 - 20:19:32
Post Id


Профессионал


Покинул форум
Сообщений всего: 9095
Дата рег-ции: Июнь 2007  
Откуда: Berlin


Помог: 707 раз(а)




Я предположил, что нужно убрать лишь заданные теги, и тогда их придется перечислять.


-----
Есть в мире две бесконечные вещи - это Вселенная и человеческая глупость. Но насчет первой .. я не уверен.
 
 Top
broshurkaplus
Отправлено: 07 Января, 2013 - 20:25:08
Post Id



Посетитель


Покинул форум
Сообщений всего: 354
Дата рег-ции: Янв. 2011  
Откуда: Пружаны Бресткая обл. Беларусь


Помог: 2 раз(а)




а я понял что вы хотите, сразу не вкурил...
5раз переписывал...

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

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


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

ну и/или в массиве перечислите все ненужное

(Отредактировано автором: 07 Января, 2013 - 20:26:40)

 
 Top
LShark
Отправлено: 07 Января, 2013 - 20:27:08
Post Id



Частый гость


Покинул форум
Сообщений всего: 240
Дата рег-ции: Нояб. 2012  


Помог: 1 раз(а)




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

А вот со вторым вариантом... Буду думать, так как заранее что то не могу предположить, какие теги натыкает тупой ворд.


-----
Истина прежде всего в том, что...
 
 Top
broshurkaplus
Отправлено: 07 Января, 2013 - 20:34:50
Post Id



Посетитель


Покинул форум
Сообщений всего: 354
Дата рег-ции: Янв. 2011  
Откуда: Пружаны Бресткая обл. Беларусь


Помог: 2 раз(а)




понятно суть - удалить/вырезать, но непонятна общая картина задачи

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



Частый гость


Покинул форум
Сообщений всего: 240
Дата рег-ции: Нояб. 2012  


Помог: 1 раз(а)




broshurkaplus пишет:
так вы если парсите контент так сохраняйте его как то без форматирования...
просто не очень понятно кто будет специально в ворде теги набирать.

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

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

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

Да, и не надо писать, что сохранять вордом - бред. Не я себе заказ пишу. А старым хрычам дай бог, научиться из ворда сохранять, не то, чтобы писать самим...

(Отредактировано автором: 07 Января, 2013 - 20:46:59)



-----
Истина прежде всего в том, что...
 
 Top
DelphinPRO
Отправлено: 07 Января, 2013 - 20:43:52
Post Id



Активный участник


Покинул форум
Сообщений всего: 7187
Дата рег-ции: Февр. 2012  


Помог: 353 раз(а)




для варианта </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 регулярки не проверял, составил "на глазок" ;)


-----
Чем больше узнаю, тем больше я не знаю.
 
 Top
broshurkaplus
Отправлено: 07 Января, 2013 - 20:50:13
Post Id



Посетитель


Покинул форум
Сообщений всего: 354
Дата рег-ции: Янв. 2011  
Откуда: Пружаны Бресткая обл. Беларусь


Помог: 2 раз(а)




ну так а я о чем Улыбка
Файл - Сохранить как - Html-страница
сконвертировать в ворд и имеем полный набор всего...

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

но это уже не к теме.
 
 Top
LShark
Отправлено: 07 Января, 2013 - 20:59:03
Post Id



Частый гость


Покинул форум
Сообщений всего: 240
Дата рег-ции: Нояб. 2012  


Помог: 1 раз(а)




DelphinPRO пишет:
для пустых тегов (для любых тегов)

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

Как бы их исключить из очистки, все таки они явно влияют на отображение документа и их удаление портит картину.
(Добавление)
Хотя что я курю, в первом выражении заменить a-z0-9 на a-oq-z0-9
(Добавление)
broshurkaplus - ради всего святого, научись не набивать посты, а отвечать на вопросы, если можешь. Как DelphinPRO, например.


-----
Истина прежде всего в том, что...
 
 Top
broshurkaplus
Отправлено: 07 Января, 2013 - 21:20:26
Post Id



Посетитель


Покинул форум
Сообщений всего: 354
Дата рег-ции: Янв. 2011  
Откуда: Пружаны Бресткая обл. Беларусь


Помог: 2 раз(а)




дерзаешь?
дерзай

(Отредактировано автором: 07 Января, 2013 - 21:25:40)

 
 Top
Страниц (2): [1] 2 »
Сейчас эту тему просматривают: 0 (гостей: 0, зарегистрированных: 0)
« Регулярные выражения »


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



Powered by PHP  Powered By MySQL  Powered by Nginx  Valid CSS  RSS

 
Powered by ExBB FM 1.0 RC1. InvisionExBB