Примеры использования объектной модели в PHP
Нахождение ссылок и разбор относительных и абсолютных
define("MY_HOST", "htmlweb.ru");
$doc = new DOMDocument();
$doc->loadHTMLFile("http://htmlweb.ru/index.php");
$links = $doc->getElementsByTagName("a");
for ($i = 0; $i < $links->length; $i++){
$preparedLink = MyLink(MY_HOST, parse_url($links->item($i)->getAttribute("href")));
$links->item($i)->setAttribute("href", $preparedLink);
}
echo $doc->saveHTML();
function MyLink($MyHost, $PLink, $Scheme = "http://"){
if(!isset($PLink["host"])){
$PLink["host"] = $MyHost;
}
$path = $PLink["path"] ? $PLink["path"] : "";
$query = $PLink["query"] ? "?{$PLink["query"]}" : "";
$fragment = $PLink["fragment"] ? "#{$PLink["fragment"]}" : "";
return $Scheme . $PLink["host"] . $path . $query . $fragment . "\n";
}
Сначала мы выбираем из документа все ссылки (точнее их атрибут href). С помощью функции приводим их все к абсолютному виду и записываем обратно в атрибуты href. На выходе получаем документ, где все относительные ссылки заменены на абсолютные с хостом, указанным в константе MY_HOST.
Удаление всех скриптов (<script>) из кода
$doc = new DOMDocument();
$doc->loadHTMLFile("http://forum.codenet.ru/showthread.php?t=38806");
$all = $doc->getElementsByTagName("script");
for ($i = 0; $i < $all->length; $i++){
$all->item($i)->remove;
}
Формирование списка активных ссылок на основании содержимого каталога
Этот скрипт используется для формирования списка примеров на этом сайте:
$path = dirname(__FILE__);
$dh = opendir( $path ) or die ( "Не удалось открыть каталог ".$path );
while ( $f = readdir( $dh ) ) {
if (!(substr($f,-4)=='.php') || $f=="index.php") continue; // исключаю картинки и текущий файл
// Загрузить документ в массив
$arr = file($path.'/'.$f);
if ( !$arr ) die ("Page not found!");
// Преобразую массив в строку
$str = join( "", $arr );
// Взять только то, что находится между тегами <title> и </title>
if (preg_match('|<title.*?>(.*)</title>|si', $str, $arr)) $title = $arr[1];
echo '<a HREF="'.$f.'">'.$title."</a><br>\n";
}
Определение кодовой страницы и преобразование полученной с помощью Curl-запроса кода в кодировку UTF-8.
$ch= curl_init($url);
curl_setopt($ch, CURLOPT_HEADER, 0);
curl_setopt($ch,CURLOPT_VERBOSE,1);
curl_setopt($ch, CURLOPT_RETURNTRANSFER, 1);
$html= curl_exec($ch);
$html1= curl_getinfo($ch);
if ($html1['content_type']){
$arr= explode('charset=',$html1['content_type']);
$csethdr= strtolower(trim($arr[1]));
} else
$csethdr= false;
$cset= false;
$arr= [];
if (preg_match_all('/(<meta\s*http-equiv="Content-Type"\s*content="[^;]*;\s*charset=([^"]*?)(?:"|\;)[^>]*>)/i',$html,$arr,PREG_PATTERN_ORDER)){
$cset= strtolower(trim($arr[2][0]));
if ($cset!='utf-8'||$cset!=$csethdr){
$new= str_replace($arr[2][0],'utf-8',$arr[1][0]);
$html= str_replace($arr[1][0],$new,$html);
$cset= $csethdr;
} else
$cset= false;
if ($cset=='utf-8') $cset= false;
}
unset($arr);
if ($cset){
$html= iconv($cset,'utf-8//IGNORE',$html);
}
unset($cset);
$html=preg_replace('/<head[^>]*>/','<head>
<meta charset="utf-8">
',$html);
$dom= new DOMDocument();
$dom->loadHTML($html);
.
Прокомментировать/Отблагодарить