Модифікація HTML за допомогою PHP класу DOMDocument

27

Від автора: перше, що ви дізнаєтеся, коли захочете скористатися скриптом 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 набагато легше обслуговувати код надалі.