Возможна замена строк выводом PHP file_get_contents?

#php

#php

Вопрос:

Я использую PHP для получения контента с внешнего веб-сайта.

Я хочу знать, возможно ли найти и заменить строки из вывода, чтобы я мог сделать все ссылки абсолютными.

Мне нужно преобразовать «/ и ‘/ в «$url/

Если это возможно сделать, я могу придумать, как сделать остальное. Хотя я не знаю, возможно ли это.

Спасибо

Ответ №1:

Для простой замены строки используйте str_replace() , например

 $html = str_replace(array("'/", '"/'), array("'$url/", '"' . $url . '/'), $html);
  

Если вам нужно более надежное решение, я бы предложил загрузить HTML-строку в DOMDocument, перебрать все теги с, href начиная с / , и изменить атрибут каждого перед записью HTML.

 $doc = new DOMDocument();
$doc->loadHTML($html);

$xpath = new DOMXPath($doc);
$anchors = $xpath->query('//*[starts-with(@href, "/")]');

foreach ($anchors as $anchor) {
    $href = $anchor->getAttribute('href');
    $anchor->setAttribute('href', $url . $href);
}
$html = $doc->saveHTML();
  

Вероятно, вы захотите сделать то же самое для тегов с src атрибутами.

Ответ №2:

Вы также могли бы использовать preg_replace(), хотя синтаксический анализ DOMDocument является наиболее надежным.

Комментарии:

1. Я просто предоставил дополнительную информацию и проголосовал за нее? В самом принятом ответе упоминается str_replace , что является тем же самым, просто менее мощным, если вы хотите обрабатывать пробелы и т.д….