Nazalost, ja ne bih nikako koristio DOM parser. Glavni razlog je ona ubijajuca prva linija koda -- ako je ubacis, sredjujes HTML za obradu, ali ubijas url; host deo nije problem, on i treba da je lowercased, ali path, query, anchor, svi oni mogu da ti puknu, jer ih izvlacis lowercased, a ne u originalu (dakle nisu isti linkovi).
Ako je izbacis, parser ce ti puci u >50% koda, jer se nece snaci sa velikim slovima bas najbolje (a mnogi ih koriste).
Dakle, treba preci na pregove... Kako raspored propertija pravi problem, najlakse je (po meni) odraditi ovo u loop-ovima. Prvo izvucemo sve meta tagove, samo proverimo imaju li equiv, i ako imaju, cupamo content.
Radio sam skoro nesto vrlo slicno (sa drugim tagovima), pa evo ti preradjenog resenja (mozda patterni skripe malo, nisam testirao):
PHP kôd:
$html = '<head>
<meta http-equiv="refresh" content="0; url=http://example1.com/">
<meta http-equiv=\'refresh\' content="0; url=http://example2.com/">
<meta http-equiv=refresh content="0; url=http://example3.com/">
</head>';
$res = array();
$metapattern = '/<meta\s(.[^>]*)>/si';
$httppattern = '/\s?http-equiv=[\'"]?refresh[\'"]?/si';
$refpattern1 = "/\s?content='\d+\s?;\s?url=([^']*)'/si";
$refpattern2 = '/\s?content="\d+\s?;\s?url=([^"]*)"/si';
// get all meta tags
preg_match_all($metapattern, $html, $metas);
foreach ( $metas[1] as $meta ) {
// check if it's equiv=refr
if ( preg_match($httppattern, $meta) ) {
// extract url prop
if ( preg_match($refpattern1, $meta, $url) || preg_match($refpattern2, $meta, $url) ) {
$res[] = $url[1];
}
}
}
print_r($res);
Doduse, kontam da bi ovo ipak opet pokrilo samo tih istih 99 od 100 gorepomenutih slucajeva, tako da je kanda svejedno...
