Uma das primeiras coisas que você aprende quando deseja implementar um service worker em um site é que o site exige SSL (um https ). Desde que vi a velocidade impressionante que os service workers podem proporcionar a um site, fiquei obcecado em preparar meu site para SSL. Aplicando SSL com .htaccess foi fácil. A parte difícil é atualizar os links de ativos no conteúdo do blog. O senhor começa achando que as expressões regulares serão a cura rápida, mas qualquer pessoa que tenha experiência com expressões regulares sabe que trabalhar com URLs é um pesadelo e que a regex é provavelmente a decisão errada.

A decisão certa é DOMDocument, um objeto PHP nativo que permite que o senhor trabalhe com HTML de forma lógica e agradável. O senhor começa carregando o HTML em uma instância do DOMDocument e, em seguida, usa suas funções previsíveis para fazer as coisas acontecerem.

// Formats post content for SSL
function format_post_content($content="") {
  $document = new DOMDocument();
  // Ensure UTF-8 is respected by using '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();
}

Em meu exemplo acima, encontro todos os img e substituo seus protocolos por https://. Vou acabar fazendo o mesmo com o iframe src, a hrefe algumas outras tags raramente usadas. Quando minhas modificações são concluídas, chamo o saveHTML para obter a nova string.

Não caia na armadilha de tentar usar expressões regulares com HTML – o senhor terá um futuro de fracasso. O DOMDocument é leve e tornará seu código infinitamente mais fácil de manter.