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

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

Код: 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
[PHP] Микропарсер. Как правильно парсить ссылки?
    #38290091
vkle
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
А чего надо то - посчитать количество определенных тегов <a> на странице, или чего другое?
...
Рейтинг: 0 / 0
[PHP] Микропарсер. Как правильно парсить ссылки?
    #38290093
vkle
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
автор
Код: php
1.
$word = "'<a href="/forum">Форум</a>'";

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

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

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

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

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

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

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


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