AKB Forums

Go Back   AKB Forums > Technical sections > Languages, Compilers and Interpreters > Web Development
Home Register Blogs FAQ Members List Calendar Downloads Arcade Mark Forums Read

Web Development Java/PHP/Perl/ASP and more

Troubles when posting message? Click here! :: Проблемы с отправлением сообщения? Нажмите сюда!

Reply
 
LinkBack Thread Tools Display Modes
Old Oct 29, 2003, 08:39   #1
¡no pasaran!
 
dolphin's Avatar
 
Join Date: Mar 2002
Location: localhost
Posts: 538
Rep Power: 7
Reputation: 23
Send a message via ICQ to dolphin
Question Простенькая задачка ;)

Напишите на любом языке (пхп/перл/с) простенький тэг парсер, а именно:

Имеем строку типа
Code:
blah blah <input type=radio name='gago' value="My name > 'Gago'  < ... blah... " CHECKED> blah blah
Выудить из этой строки тэг "input" (ну или просто первый попавшийся) и загнать в ассоциативный массив все параметры с соответствующими значениями (в том числе и CHECKED с каким-нить _NULL значением)

Слабо?

З.Ы. Для любителей регексов, которые будут возмущаться по поводу `<',`>' в параметре value могут сами проверить работоспособность приведенного тэга в любом браузере, и еще подумать над таким вот случаем:
Code:
onClick="if(a > b) alert(' priexali:P ');"
__________________
[ que fors aus ne le sot riens nee ]
dolphin is offline   Reply With Quote Quote selected
Old Oct 29, 2003, 11:01   #2
¡no pasaran!
 
dolphin's Avatar
 
Join Date: Mar 2002
Location: localhost
Posts: 538
Rep Power: 7
Reputation: 23
Send a message via ICQ to dolphin
Exclamation

Да, кстати это тестовое задание. Нашей фирме требуются веб-девелоперы.
Зарплата: $150. Жду ответов.
__________________
[ que fors aus ne le sot riens nee ]
dolphin is offline   Reply With Quote Quote selected
Old Nov 1, 2003, 09:20   #3
Школьник
 
Join Date: Apr 2002
Location: Vanadzor
Posts: 227
Rep Power: 7
Reputation: 10
PHP Code:
<?
error_reporting
(0);
$file 'some.html';


$html implode (''file ($file)); 

$start_tag_flag $end_tag_flag 0;
$I $i 0;

$PARSED_ARRAY = array();
$PARSED_ATTRS = array();

while( 
$i strlen($html) ) {
    
$c $html[$i];
    
$n $html[$i+1];
    
$tag '';

    if( 
$c == '<' && $n != '/' ) {
        
$start_tag_flag 1;
        while( 
) {
            
$c $html[++$i];
            if( 
$c == ' ' || $c == '>' )  break;
            if( 
$c == '<' ) {
                
$tag '';
                break;
            }
            
$tag .= $c;
        }

        if( !
$tag ) continue;

        
$end_tag_flag 0;
        
$PARSED_TAGS[$I] = $tag;
        
$ARR = array();

        while( 
$c != '>' ) {
            
$end_chr ' ';
            
$attr $value '';
            
$start_q $v 0;
            while( 
) {
                
$c $html[++$i];

                if( 
$c == '=' ) {
                    
$v 1;
                    
$c $html[++$i];
                }

                if( 
$c == '"' && !$start_q) {
                    
$end_chr '"';
                    if( !
$start_q ) {
                        
$start_q 1;
                        
$c $html[++$i];
                    }
                }else if( 
$c == "'" && !$start_q) {
                    
$end_chr "'";
                    if( !
$start_q ) {
                        
$start_q 1;
                        
$c $html[++$i];
                    }
                }

                if( (
$start_q && $c == $end_chr) || (!$start_q && ($c == $end_chr || $c == '>')) ) break;

                if( 
$v == )
                    
$value .= $c;
                else
                    
$attr .= $c;
            }

            if( 
$attr && $attr != '/' && $attr != '?' ) {
                 
$ARR[$attr] = $value;
            }
        }
        
$PARSED_ATTRS[$I] = $ARR;
        
$I++;
    }else if( 
$c == '<' && $n == '/' ) {
        
$end_tag_flag 1;
        
$i++;
        while( 
) {
            
$c $html[++$i];
            if( 
$c == '>' )  break;
            
$tag .= $c;
        }
        
$PARSED_TAGS[$I] = "/$tag";
        
$PARSED_ATTRS[$I] = array();
        
$I++;
        
$start_tag_flag 0;
    }

    
$i++;
}


for(
$i=0$i<$I$i++){
    echo 
"<b>$PARSED_TAGS[$i]</b><br>";
    foreach( 
$PARSED_ATTRS[$i] as $a => $b ){
        echo 
"&nbsp;&nbsp;&nbsp;$a -> $b<br>";
    }
    echo 
"<hr>";
}

?>

da kstati ya rabotayu tolko freelance.
strax. is offline   Reply With Quote Quote selected
Old Nov 1, 2003, 15:03   #4
¡no pasaran!
 
dolphin's Avatar
 
Join Date: Mar 2002
Location: localhost
Posts: 538
Rep Power: 7
Reputation: 23
Send a message via ICQ to dolphin
решение правильное, но будет работать довольно медленно. Желательно использовать strpos, который работает намного быстрее итераций в цикле.

К сожалению нам нужны фул-тайм работники.
__________________
[ que fors aus ne le sot riens nee ]
dolphin is offline   Reply With Quote Quote selected
Reply


Thread Tools
Display Modes

Posting Rules
You may not post new threads
You may not post replies
You may not post attachments
You may not edit your posts

vB code is On
Smilies are On
[IMG] code is On
HTML code is Off
Trackbacks are On
Pingbacks are On
Refbacks are On



All times are GMT. The time now is 13:35.


Powered by vBulletin® Version 3.6.8
Copyright ©2000 - 2008, Jelsoft Enterprises Ltd.
This board was founded on September 29, 2001
Powered by Viper Internet

Affordable Web Hosting | ParevNet

Buy text link