Версия для печати темы
Нажмите сюда для просмотра этой темы в оригинальном формате
Форум программистов > PHP: Общие вопросы > Как заменить в preg_replace


Автор: DenWPF 15.2.2011, 23:34
как сюда добавить что бы удалялись 
#XXX; &XXXX;    x- любой один символ.

пытался так не получилось.
'#...;','&....;',


и ещё бы заменить все '|'
Код

    $text = preg_replace(
        array(
            // Remove invisible content
            '@<head[^>]*?>.*?</head>@siu',
            '@<style[^>]*?>.*?</style>@siu',
            '@<iframe[^>]*?>.*?</iframe>@siu',
            '@<script[^>]*?.*?</script>@siu',
            '@<object[^>]*?.*?</object>@siu',
            '@<embed[^>]*?.*?</embed>@siu',
            '@<applet[^>]*?.*?</applet>@siu',
            '@<noindex[^>]*?.*?</noindex>@siu',
            '@<noframes[^>]*?.*?</noframes>@siu',
            '@<noscript[^>]*?.*?</noscript>@siu',
            '@<noembed[^>]*?.*?</noembed>@siu',
            '@<img[^>]*?.*?</img>@siu',
            '@<form[^>]*?.*?</form>@siu',
            

            // Add line breaks before & after blocks
            '@<((br)|(hr))@iu',
            '@</?((address)|(blockquote)|(center)|(del))@iu',
            '@</?((div)|(h[1-9])|(ins)|(isindex)|(p)|(pre))@iu',
            '@</?((dir)|(dl)|(dt)|(dd)|(li)|(menu)|(ol)|(ul))@iu',
            '@</?((table)|(th)|(td)|(caption))@iu',
            '@</?((form)|(button)|(fieldset)|(legend)|(input))@iu',
            '@</?((label)|(select)|(optgroup)|(option)|(textarea))@iu',
            '@</?((frameset)|(frame)|(iframe))@iu',
        ),
        array(
            ' ', ' ', ' ', ' ', ' ', ' ', ' ', ' ', ' ',
            "\n\$0", "\n\$0", "\n\$0", "\n\$0", "\n\$0", "\n\$0",
            "\n\$0", "\n\$0",
        ),
        $text );

Автор: patap 16.2.2011, 10:19
Код

[#&].+?;


так?

Добавлено через 56 секунд
либо можно жесткое кол-во задать

Код

[#&].{3,4};

Автор: DenWPF 16.2.2011, 10:36
всё равно почему то осталось
Цитата

Я&nbsp;ищу &nbsp;&nbsp;&nbsp;&nbsp;Расширенный поиск

Автор: patap 16.2.2011, 11:15
да должно работать...у меня по крайней мере отрабатывает нормально
не пойму в чем может заключаться проблема.. 

ты модификатор u используешь, а строка тоже в utf-8? хотя если бы это было не так, то должно было бы вернуть null

Автор: DenWPF 16.2.2011, 16:26
ты в том скрипте добавляешь, который в 1 посте?

Автор: patap 16.2.2011, 17:03
да, в том коде в конец первого массива добавил, правда строку конвертировал в utf, чтобы работало

а что тебе нужно сделать? 

1. нужно удалить теги (head|style|iframe|script|object|embed|applet|noindex|noframes|noscript|noembed|img|form) и контент в них.
2. // Add line breaks before & after blocks - это шото не совсем ясно
3. удалить по маске #XXX; &XXXX;

Автор: DenWPF 16.2.2011, 17:49
http://tender-zone.co.cc/clear2.php?i=http://allday.ru

Код

    $text = preg_replace(
        array(
            // Remove invisible content
            '@<head[^>]*?>.*?</head>@siu',
            '@<style[^>]*?>.*?</style>@siu',
            '@<iframe[^>]*?>.*?</iframe>@siu',
            '@<script[^>]*?.*?</script>@siu',
            '@<object[^>]*?.*?</object>@siu',
            '@<embed[^>]*?.*?</embed>@siu',
            '@<applet[^>]*?.*?</applet>@siu',
            '@<noindex[^>]*?.*?</noindex>@siu',
            '@<noframes[^>]*?.*?</noframes>@siu',
            '@<noscript[^>]*?.*?</noscript>@siu',
            '@<noembed[^>]*?.*?</noembed>@siu',
            '@<img[^>]*?.*?</img>@siu',
            '@<form[^>]*?.*?</form>@siu',
            
            

            // Add line breaks before & after blocks
            '@<((br)|(hr))@',
            '@</?((address)|(blockquote)|(center)|(del))@iu',
            '@</?((div)|(h[1-9])|(ins)|(isindex)|(p)|(pre))@iu',
            '@</?((dir)|(dl)|(dt)|(dd)|(li)|(menu)|(ol)|(ul))@iu',
            '@</?((table)|(th)|(td)|(caption))@iu',
            '@</?((form)|(button)|(fieldset)|(legend)|(input))@iu',
            '@</?((label)|(select)|(optgroup)|(option)|(textarea))@iu',
            '@</?((frameset)|(frame)|(iframe))@iu',
            '[#&].{3,4,5};siu',
        ),
        array(
            ' ', ' ', ' ', ' ', ' ', ' ', ' ', ' ', ' ',
            "\n\$0", "\n\$0", "\n\$0", "\n\$0", "\n\$0", "\n\$0",
            "\n\$0", "\n\$0",
        ),
        $text );


Автор: patap 16.2.2011, 17:54
судя по всему это html сущности, может будет проще применить http://ua.php.net/html_entity_decode

если от 3 до 5 то так нужно
Код

'[#&].{3,5};siu'

Автор: DenWPF 16.2.2011, 18:21
 html_entity_decode() - как то не так...
он заменяет сущности на вопросики. попробывал в разных местах написать, то перекодировки до убирания html тегов

даже попробывал так:

Код


$search = array ("'([\r\n])[\s]+'",                 // Вырезает пробельные символы 
                 "'&(quot|#34);'i",                 // Заменяет HTML-сущности 
                 "'&(amp|#38);'i", 
                 "'&(lt|#60);'i", 
                 "'&(gt|#62);'i", 
                 "'&(nbsp|#160);'i", 
                 "'&(iexcl|#161);'i", 
                 "'&(cent|#162);'i", 
                 "'&(pound|#163);'i", 
                 "'&(copy|#169);'i", 
                 "'&#(\d+);'e");                    // интерпретировать как php-код 

$replace = array ("", 
                  "", 
                  "\\1", 
                  "\"", 
                  "&", 
                  "<", 
                  ">", 
                  " ", 
                  chr(161), 
                  chr(162), 
                  chr(163), 
                  chr(169), 
                  "chr(\\1)"); 

$text = preg_replace($search, $replace, $text);

Автор: patap 16.2.2011, 18:42
ты там в посте, где ссылку приводил на скрипт, и собственно код скрипта в строке 29 написал

Код

'[#&].{3,4,5};siu',


а нужно
Код

'@[#&].{3,5};@siu',


исправь и попробуй еще раз

Автор: DenWPF 16.2.2011, 19:01
не помогло

Автор: DenWPF 17.2.2011, 00:55
я просто опять исправлял в другом скрипте =((( спасибо вы верно подсказывали

Powered by Invision Power Board (http://www.invisionboard.com)
© Invision Power Services (http://www.invisionpower.com)