Форум: Форум PHPФорум ApacheФорум Регулярные ВыраженияФорум MySQLHTML+CSS+JavaScriptФорум FlashРазное
Новые темы: 0000000
MySQL 5. В подлиннике. Авторы: Кузнецов М.В., Симдянов И.В. Программирование. Ступени успешной карьеры. Авторы: Кузнецов М.В., Симдянов И.В. PHP 5. На примерах. Авторы: Кузнецов М.В., Симдянов И.В., Голышев С.В. PHP. Практика создания Web-сайтов (второе издание). Авторы: Кузнецов М.В., Симдянов И.В. MySQL на примерах. Авторы: Кузнецов М.В., Симдянов И.В.
ВСЕ НАШИ КНИГИ
Консультационный центр SoftTime

Форум Регулярные Выражения

Выбрать другой форум

 

Здравствуйте, Посетитель!

вид форума:
Линейный форум Структурный форум

тема: Регулярное выражение для очистки html кода от всех лишних пробелов и переходов на новую строку
 
 автор: pavluxa09   (27.01.2011 в 00:47)   письмо автору
 
 

Добрый день. Пожалуйста, помогите составить регулярное выражение, с помощью которого можно будет очистить переменную, которая содержит HTML код. Под словом очистить имеется введу: убрать все переходы на новую строку (\n) - сделать весь HTML код в одну строку; убрать все лишние пробелы между двумя разными тегами.

Необходимо учесть, что мой HTML может заканчиваться следующим образом:
<тег> тут много пробелов

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

Вот то что у меня получилось сделать, но нужно это как можно сильнее упростить, помогите:

function MyFunction( &$iData )
{
             $iData = str_replace( array( "\n","\t","\0","\r" ),'',$iData );
             $iData = preg_replace( "/>( )+/",'>',$iData );
             $iData = preg_replace( "/( )+</",'<',$iData );
}


Данную вещь нужно организовать на PHP. Заранее спасибо

  Ответить  
 
 автор: SHAman   (27.01.2011 в 10:04)   письмо автору
 
   для: pavluxa09   (27.01.2011 в 00:47)
 

Что не устраивает в текущем решении? Я, разве что, вместо
( )+
использовал бы
\s+
.

  Ответить  
 
 автор: pavluxa09   (27.01.2011 в 10:49)   письмо автору
 
   для: SHAman   (27.01.2011 в 10:04)
 

Отлично. То что нужно, спасибо! В результате мы имеем функцию:

function Clear( &$iData ) {
    $iData = str_replace( array( "\n","\t","\0","\r" ),'',$iData );
    $iData = preg_replace( "/>\s+/",'>',$iData );
    $iData = preg_replace( "/\s+</",'<',$iData );
}

При помощи которой мы можем весь HTML код преобразовать в одну строку и убрать все лишние пробелы!

  Ответить  
 
 автор: Deed   (28.01.2011 в 23:34)   письмо автору
 
   для: pavluxa09   (27.01.2011 в 10:49)
 

Зачем писать целую функцию, когда можно так:


<?
preg_replace
("/((?<=>)|(?<=--)|(?<=.))[\s\n\r\t]+((?=--)|(?=<))/U",'',$iData);
?>

Эта регулярка неочевидна, но правильная.

Условие (?<=--) включил на всякий случай. Бывает, попадается в коде что-то вроде:


<!--

        bla-bla-bal...

-->


Правильнее было бы использовать в конце регулярки модификатор g, но некторые сборки PHP с ним не дружат.

  Ответить  
Rambler's Top100
вверх

Rambler's Top100 Яндекс.Метрика Яндекс цитирования