От автора: первое, что вы узнаете, когда захотите воспользоваться скриптом service worker на своем сайте, это то, что сайту требуется SSL соединение (HTTPS). С тех пор, как я увидел, насколько быстро может работать сайт с данным скриптом, я не расставался с желанием подготовить мой сайт под SSL. Принудительно подключить SSL через файл .htaccess было легко – сложнее было обновить ссылки в статьях блога. Сначала может показаться, что это можно быстро сделать с помощью регулярных выражений, но тот, кто имел честь работать с регулярными выражениями и ссылками, знает, что это настоящий кошмар. Регулярные выражения не выход из ситуации.
Правильным решением в такой ситуации будет DOMDocument – нативный PHP объект, с помощью которого можно работать с HTML логически. Сначала HTML загружается в экземпляр DOMDocument, и функции класса обрабатывают его.
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 |
// Изменение контента поста под 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('//davidwalsh.name', '//davidwalsh.name', $tag->getAttribute('src') ) ); } return $document->saveHTML(); } |
В моем примере выше я ищу все теги img и в атрибуте src заменяю адрес на //
. Я также добавил замену адреса для тегов и соответствующих атрибутов в iframe src, a href и еще несколько редко используемых тегов. Когда все модификации произведены, я сохраняю код всей страницы в строку с помощью метода saveHTML.
Не пытайтесь использовать регулярные выражения с HTML – ничем хорошим в дальнейшем это не кончится. А с помощью легковесной библиотеки DOMDocument гораздо легче обслуживать код в дальнейшем.
Автор: David Walsh
Источник: //davidwalsh.name/
Редакция: Команда webformyself.
Комментарии (4)