Регистрация Войти
Войти через VK Войти через FB Войти через Google Войти через Яндекс
Войти через VK Войти через FB Войти через Google Войти через Яндекс
Поиск по сайту
Наш чат в Telegram для обмена идеями, проектами, мыслями, людьми в сфере ИТ г.Ростова-на-Дону: @it_rostov
Примеры использования объектной модели в 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 HTTP-EQUIV="Content-Type" CONTENT="text/html; charset=utf-8">
',$html);
$dom= new DOMDocument();
$dom->loadHTML($html);