Гость
Целевая тема:
Создать новую тему:
Автор:
Форумы / PHP, Perl, Python [игнор отключен] [закрыт для гостей] / [PHP] Микропарсер. Как правильно парсить ссылки? / 10 сообщений из 10, страница 1 из 1
07.06.2013, 12:37
    #38290020
Маша и
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
[PHP] Микропарсер. Как правильно парсить ссылки?
Помогите пожалуйста разобраться почему-то не работает.
Как правильно парсить ссылки?

Вот это как-то не работает, как лучше сделать?

Код: php
1.
2.
3.
4.
5.
6.
7.
$word = "'<a href="/forum">Форум</a>'";
$site = "http://www.sql.ru";
$page = file_get_contents ( $site );
$count_words = preg_match_all ( $word, $page, $matches );
echo 'Количество найденных ссылок: ', $count_words, '
';
print_r ( $matches );
...
Рейтинг: 0 / 0
07.06.2013, 13:07
    #38290091
vkle
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
[PHP] Микропарсер. Как правильно парсить ссылки?
А чего надо то - посчитать количество определенных тегов <a> на странице, или чего другое?
...
Рейтинг: 0 / 0
07.06.2013, 13:08
    #38290093
vkle
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
[PHP] Микропарсер. Как правильно парсить ссылки?
автор
Код: php
1.
$word = "'<a href="/forum">Форум</a>'";

Ошибка. Не забываем про экранирование кавычек!
...
Рейтинг: 0 / 0
07.06.2013, 15:04
    #38290411
alex564657498765453
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
[PHP] Микропарсер. Как правильно парсить ссылки?
vkleавтор
Код: php
1.
$word = "'<a href="/forum">Форум</a>'";

Ошибка. Не забываем про экранирование кавычек!

да там куча ошибок

косую, больше меньше тоже надо экранировать ...помница у мня както на равно ругалось через экран пришлось
...
Рейтинг: 0 / 0
07.06.2013, 15:11
    #38290439
mhx
mhx
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
[PHP] Микропарсер. Как правильно парсить ссылки?
Код: php
1.
$count_words = preg_match_all ('#<a\s+href="(.+?)".*?>.+?</a>#', $page, $matches);
...
Рейтинг: 0 / 0
08.06.2013, 02:08
    #38291144
Маша и
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
[PHP] Микропарсер. Как правильно парсить ссылки?
Вообщем разобрались..., мы же не ищем легких путей :)
Все переменные пришлось обработать доп. функцией(кастомной) по экранированию тегов,
и прочей лабуды. И всё заработало как надо.

Всем спасибо за участие и ответы!
...
Рейтинг: 0 / 0
08.06.2013, 02:10
    #38291145
Маша и
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
[PHP] Микропарсер. Как правильно парсить ссылки?
Маша и,

Если кому-то интересно спрашивайте, я с удовольствием распишу что и как.
...
Рейтинг: 0 / 0
08.06.2013, 10:10
    #38291195
phpz
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
[PHP] Микропарсер. Как правильно парсить ссылки?
Маша иВсе переменные пришлось обработать доп. функцией(кастомной) по экранированию тегов,
и прочей лабуды.А что это за дополнительная функция по экранированию тегов? В пыхе своих нет что-ли?
...
Рейтинг: 0 / 0
08.06.2013, 11:03
    #38291211
Маша и
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
[PHP] Микропарсер. Как правильно парсить ссылки?
phpzМаша иВсе переменные пришлось обработать доп. функцией(кастомной) по экранированию тегов,
и прочей лабуды.А что это за дополнительная функция по экранированию тегов? В пыхе своих нет что-ли?

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

Что-то типа этого :)

Код: php
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
17.
18.
19.
20.
21.
22.
23.
24.
25.
26.
27.
28.
29.
30.
31.
32.
33.
34.
35.
36.
37.
38.
39.
40.
41.
42.
43.
44.
45.
46.
47.
48.
49.
50.
51.
52.
53.
54.
55.
56.
57.
58.
59.
60.
61.
62.
63.
64.
65.
66.
67.
68.
69.
70.
71.
72.
73.
74.
75.
76.
77.
78.
79.
80.
81.
82.
83.
84.
85.
86.
87.
88.
89.
90.
91.
92.
93.
94.
95.
96.
97.
98.
99.
100.
101.
102.
103.
104.
105.
106.
107.
108.
109.
110.
111.
112.
113.
114.
115.
116.
117.
118.
119.
120.
121.
122.
123.
124.
125.
126.
127.
128.
129.
130.
131.
132.
133.
134.
135.
136.
/**   
* Основная функция интерпретатора
* @param string $text   //обрабатываемый текст
* @return string 
*/   
    function createBBtags($text, $replace = true)
    {   
/**
Разбираем массивы. 
Это для более удобной конфиги (их вообще то можно было сразу в разные прописать).
Ну а что бы не дергать каждый раз, объявим статическими.
*/            
        static $bb_open, $bb_close, $bb_single, $tmp_open, $tmp_close, 
               $tmp_single, $max_len, $links, $images, $video, 
               $html_open, $html_close, $html_single, $formatters;
            
            if(empty($bb_open))
            {
                global $configBBcode;
                extract($configBBcode);
            
                $bb_open      = array_keys($setup_bb);
                $bb_close     = array_values($setup_bb);                                                        
                $html_open    = array_keys($setup_html);
                $html_close   = array_values($setup_html);
                $bb_single    = array_keys($single_tags);
                $html_single  = array_values($single_tags);
            } 
        
    //  Oчистим текст от иероглифов
        $text = str_replace($tmp_open, '', $text);
        $text = str_replace($tmp_close, '', $text);
        $text = str_replace($tmp_single, '', $text);
                  
        $text = str_replace("\r", "", $text);
        $text = str_replace("\t", "    ", $text);
        
/**  
Если режим очистки - 
удаляем бб-теги из текста
*/                  
    if(!$replace)
    {              
        $text = str_replace($bb_open, '', $text);
        $text = str_replace($bb_close, '', $text);
        $text = str_replace($bb_single, '', $text);
        $text = preg_replace('#\[(code|url|img|video)[^\s]*?\].*?\[/\\1\]#usi', '', $text); 

    }
    else
    {        
/** 
Если включен режим bb-тегов, 
заменим заявленные теги на одиночные символы и дальше по тексту 
Используется функция str_ireplace(), чтобы BB-теги были регистронезависимыми
*/ 

                   
        $text = str_ireplace($bb_open, $tmp_open, $text);
        $text = str_ireplace($bb_close, $tmp_close, $text);
        $text = str_ireplace($bb_single, $tmp_single, $text);   
/** 
Начинается разбор полетов. Сначала уничтожаем пустые теги.
Тут же за одно считаем, сколько открывающих и сколько закрывающих
*/ 
        $open_cnt = array();
   
        foreach($tmp_open as $k => $v)
        {
           $text = preg_replace("#". $v ."\s*?". $tmp_close[$k] ."#us", "", $text);
           $cnt = substr_count($text, $v);
           
           if($cnt > 0)
           {
               $open_cnt[$v] = $cnt;
               $close_cnt[$v] = substr_count($text, $tmp_close[$k]);
           }              
        }
        
/** 
Дальше уничтожаем непарные теги
Регулярка составлена так, что удаляет последний заявленный символ
Это дает возможность удалить незакрытые теги с конца текста,
не трогая закрытые.
*/     
        foreach($open_cnt as $k => $v)
        {
                
            if($v > $close_cnt[$k])
            {
                for($i = 0; $i < $v - $close_cnt[$k]; ++$i)
                    $text = preg_replace('#'. $k .'(?!.*'. $k .')#us', '', $text);
            }
        
        }
    }             
// Обрабатываем текст 
       
        $text = mBwordwrap($text, 100);                 
        $text = ($text);
   
           
        //Функция getFormat() сама разберется, какой форматтер использовать. 
        if(count($formatters))
            $text = preg_replace_callback('#\[code=([^\] ]+?)\](.+?)\\\1\]#si', 'getFormat', $text);         
        //Обработка ссылок. Пройдут только те, которые начинаются с http:// и https:// и не содержат пробелов        
        if($links)
        {                   
            $text = preg_replace_callback('#\http(s*)://([^\] ]+?)\](.+?)\[/url\]#si', 'createLink1', $text);
            $text = preg_replace_callback('#\\]http(s*)://(.+?)\[/url\]#si', 'createLink2', $text);
            $text = str_replace ("&amp;", "&", $text);
        }    
        //Картинки. Тоже http:// и без пробелов. На вс. случай запретим GET параметры      
        if($images)    
            $text = preg_replace_callback('#\[img\]http://([^\] \?]+?)\[/img\]#si', 'createImg', $text); 
            
        //Видео. Та же песня      
        if($video)    
            $text = preg_replace_callback('#\[video\]http://([^\] \?]+?).flv\[/video\]#si', 'createSwf', $text);         
             
/** 
Если включен режим bb-тегов,
меняем обратно временные символы на HTML теги
*/    
    if($replace)
    {       
        $text = str_replace($tmp_open, $html_open, $text);
        $text = str_replace($tmp_close, $html_close, $text);
        $text = str_replace($tmp_single, $html_single, $text);
    }        
// Сохраняем оригинальное форматирование                
        $text = str_replace('  ', '&nbsp;&nbsp;', $text);    
        $text = nl2br($text);
// За ушкО на солнышкО                       
        return $text;            
    } 
...
Рейтинг: 0 / 0
08.06.2013, 11:54
    #38291218
phpz
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
[PHP] Микропарсер. Как правильно парсить ссылки?
Маша и,

А ну понятно, я просто под экранированием немного другое имел в виду.
...
Рейтинг: 0 / 0
Форумы / PHP, Perl, Python [игнор отключен] [закрыт для гостей] / [PHP] Микропарсер. Как правильно парсить ссылки? / 10 сообщений из 10, страница 1 из 1
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


Просмотр
0 / 0
Close
Debug Console [Select Text]