Регистрация Войти
Войти через VK Войти через FB Войти через Google Войти через Яндекс
Войти через VK Войти через FB Войти через Google Войти через Яндекс
Поиск по сайту
Примеры использования объектной модели в 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);
.
Прокомментировать/Отблагодарить