У меня есть странная ошибка, связанная с DOM. Я пытаюсь перебрать все href внутри документа и при необходимости заменить его абсолютным путем. Проблема в том, что после использования $dom->setttribute()
, getAttribute
возвращает измененное значение. Тем не менее, если I saveHTML()
или теги запроса снова используют getElementsByTagName и getAttribute, значения усекаются от http://example.com/path.php?ccc до http://example.com.Изменение атрибута с DOM в PHP не сохраняется правильно
Вот мой код:
<?php
//include 'url_to_absolute.php';
function url_to_absolute($url, $href) {
return trim($url . $href);
}
$url = 'http://example.com';
//$url = $_GET["url"];
$ch = curl_init();
curl_setopt($ch,CURLOPT_URL, $url);
curl_setopt($ch, CURLOPT_RETURNTRANSFER, 1);
$contents = curl_exec($ch);
@curl_close();
$dom = new DOMDocument();
$dom->loadHTML($contents);
//change the urls to absolute
$anchors = $dom->getElementsByTagName('a');
foreach($anchors as $anchor)
{
$href = $anchor->getAttribute('href');
$abs = url_to_absolute($url, $href);
$anchor->removeAttribute('href');
$anchor->setAttribute('href', $abs);
//changed
$newhref = $anchor->getAttribute('href');
echo "newhref = " . $newhref; //shows http://example.com/.... (good)
}
$anchors = $dom->getElementsByTagName('a');
foreach($anchors as $anchor)
{
echo "new2 = " . $anchor->getAttribute('href'); //returns http://example.com only
}
//print output
echo @$dom->saveHTML();
?>
Не могли бы вы опубликовать функцию вашего url_to_absolute() пожалуйста ? И в вашем фрагменте переменная $ url не существует. – pp19dd
Моя функция url_to_absolute Я получил отсюда: http://nadeausoftware.com/articles/2008/05/php_tip_how_convert_relative_url_absolute_url#Code –
my $ url переменная была установлена ранее как $ url = $ _GET ['url'] –