[PHP] Dom parser a strpos

Webdesign, HTML, CSS, Flash, PHP, ASP, .NET, JavaScript. Kritika www stránek na Smetišti.

Moderátor: Moderátoři Živě.cz

Odeslat příspěvekod infomf 8. 1. 2012 12:34

Ahoj,
ze stránake si přes DOM parser vytahnu adresy a poté testuji jestli obsahuji http://, nebo .jpg (atd.) Pokud je neobsahuji vykona se urcita akce. Bohuzel, nevim proc, ale strpos me nechce zkontrolovat adresy... Nic nehlasi a taky nic nevraci (i kdyz by mel)...

Kód: Vybrat vše
               foreach($html->find('a') as $element){
                  echo $element->href.'<br>';
                                    
                if((strpos('mailto:', $element->href)=='') && (strpos('javascript:', $element->href)=='') && (strpos('http://', $element->href)=='') && (strpos('https://', $element->href)=='') && (strpos('www.', $element->href)=='') && ($element->href!='php.php') && ($element->href!='') && ($element->href!=' ') && (strpos('#', $element->href)=='') && (strpos('.jpg', $element->href)=='') && (strpos('.png', $element->href)=='') && (strpos('.gif', $element->href)=='') && (strpos('.zip', $element->href)=='') && (strpos('.rar', $element->href)=='') && (strpos('.exe', $element->href)=='')){

...

}
}

Díky za rady                  
infomf
Junior
Uživatelský avatar

Odeslat příspěvekod gandor 8. 1. 2012 13:00

Mozno je to tym, ze jedna premenna nemoze naraz obsahovat nieco a zaroven byt prazdna... Proste kazda premenna ma len jednu hodnotu.
A pytat sa v 1 IF statement, ze ci ma naraz aj hodnotu A aj hodnotu B musi logicky vzdy hodit FALSE....

Jo a este jedna malickost... strpos vracia index (teda cislo), resp. false pri nenajdeny. Teda strpos(COKOLVEK) == '' tiez nieje zrovna nieco, co by som pouzival...

Jo a poznamka. Pokial je match na zaciatku textu, tak strpos vrati 0. No a nula cez == je rovna false. Teda pozor na detekciu. Treba potom skumat aj typ hodnoty (pouzivat === miesto ==)...
gandor
Mírně pokročilý

Odeslat příspěvekod infomf 8. 1. 2012 13:23

Zkusil jsem tvoje rady, ale porad jsem na mrtvem bode.
Kód: Vybrat vše
foreach($html->find('a') as $element){
    if(strpos('http://', $element->href)===false){
...
     }
}

infomf
Junior
Uživatelský avatar

Odeslat příspěvekod gandor 8. 1. 2012 13:37

Tak sa pozri, ze co ti to vracia...
Pred testovanim je dobre pozriet sa obcas co testujes...
Spusti si tento kod:
Kód: Vybrat vše
foreach($html->find('a') as $element){
    echo 'Testovanie hodnoty: '.htmlspecialchars((string)($element->href)).' -> ';
    if(strpos('http://', $element->href)===false){
        echo 'Vyhovoval<br />';
     } else {
       echo 'NEvyhovoval<br />';
    }
}
Nasledne tak zistis:
ci ti dany find najde nejake anchory,
ci dostavas s daneho objektu texty,
ako vyzeraju dane testovane texty,
ci mas chybu v teste, ktory ma ocividne prejst (a hladat preklep tam),
alebo ci mas chybu uz vo vstupnych datach a riesis chybu tak, kde vobec nieje...

No a taketo nieco by si mal aplikovat takpovediac vsade, kde mas problem (proste rozbit si velky problem na co najmensie elementy - kontrolovat ich ocakavane vstupy a vystupy oproti realnym vstupom a vystupom a nasledne riesit problem daneho IDENTIFIKOVANEHO vadneho elementu)...
gandor
Mírně pokročilý


Kdo je online

Uživatelé procházející toto fórum: Žádní registrovaní uživatelé a 0 návštevníků