Модификация HTML с помощью PHP класса DOMDocument

Модификация HTML с помощью PHP класса DOMDocument

От автора: первое, что вы узнаете, когда захотите воспользоваться скриптом service worker на своем сайте, это то, что сайту требуется SSL соединение (HTTPS). С тех пор, как я увидел, насколько быстро может работать сайт с данным скриптом, я не расставался с желанием подготовить мой сайт под SSL. Принудительно подключить SSL через файл .htaccess было легко – сложнее было обновить ссылки в статьях блога. Сначала может показаться, что это можно быстро сделать с помощью регулярных выражений, но тот, кто имел честь работать с регулярными выражениями и ссылками, знает, что это настоящий кошмар. Регулярные выражения не выход из ситуации.

Правильным решением в такой ситуации будет DOMDocument – нативный PHP объект, с помощью которого можно работать с HTML логически. Сначала HTML загружается в экземпляр DOMDocument, и функции класса обрабатывают его.

// Изменение контента поста под SSL
function format_post_content($content = '') {
  $document = new DOMDocument();
  // Проверяем кодировку UTF-8 с помощью'mb_convert_encoding'
  $document->loadHTML(mb_convert_encoding($content, 'HTML-ENTITIES', 'UTF-8'));
  
  $tags = $document->getElementsByTagName('img');
  foreach ($tags as $tag) {
    $tag->setAttribute('src', 
      str_replace('http://davidwalsh.name', 
                  'https://davidwalsh.name', 
                  $tag->getAttribute('src')
      )
    );
  }
  return $document->saveHTML();
}

В моем примере выше я ищу все теги img и в атрибуте src заменяю адрес на `https://`. Я также добавил замену адреса для тегов и соответствующих атрибутов в iframe src, a href и еще несколько редко используемых тегов. Когда все модификации произведены, я сохраняю код всей страницы в строку с помощью метода saveHTML.

Не пытайтесь использовать регулярные выражения с HTML – ничем хорошим в дальнейшем это не кончится. А с помощью легковесной библиотеки DOMDocument гораздо легче обслуживать код в дальнейшем.

Автор: David Walsh

Источник: https://davidwalsh.name/

Редакция: Команда webformyself.

Курс по программированию на языке PHP

Изучите PHP с нуля до результата!

Смотреть курс

Метки: ,

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

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

Комментарии (4)

  1. evgeniyholon

    В строке 5 опечатка, вместо $doc надо $document.

  2. Вячеслав

    Андрей, спасибо тебе за твой труд уроки и их изложение СУПЕР!

  3. Борис

    Здравствуйте! Спасибо за полезную информацию. Пытаюсь докумекать как её теперь использовать. Например есть сайт на Джумла + Virtumart. Как и где целесообразно запускать этот скрипт? Получается не в index.php шаблона, а где-то на уровень выше?.. В index.php сайта?

Добавить комментарий

Ваш e-mail не будет опубликован. Обязательные поля помечены *

Можно использовать следующие HTML-теги и атрибуты: <a href="" title=""> <abbr title=""> <acronym title=""> <b> <blockquote cite=""> <cite> <code> <del datetime=""> <em> <i> <q cite=""> <strike> <strong>

Я не робот.

Spam Protection by WP-SpamFree