REGEX: сделать все URL абсолютными - PullRequest
4 голосов
/ 12 августа 2010

Мне нужен способ взять блок HTML-кода и сделать все URL-адреса абсолютными. Я пытался использовать различные примеры регулярных выражений, но безуспешно. Это требования:

  • Заменить URL HREF и SRC
  • Если URL уже абсолютный, оставьте его
  • Если URL-адрес абсолютный, замените его

Каждый HTML-код поступает с известного URL (example.com/folder/file.html), который можно использовать для создания абсолютных URL-адресов. Например:

src = "image.png" становится src = "http://example.com/folder/image.png" href = "/ home.html" становится href = "http://example.com/home.html"

Я нашел функцию, которая делает именно то, что мне нужно:

http://nashruddin.com/PHP_Script_for_Converting_Relative_to_Absolute_URL

Но я не могу понять, как это сделать оптом для всех URL-адресов в блоке кода.

Любая помощь будет отличной!

Приветствие.

Ответы [ 2 ]

3 голосов
/ 12 августа 2010

Не используйте регулярные выражения для разбора (X) HTML - вам нужно использовать синтаксический анализатор SGML или XML и использовать вместо этого регулярное выражение для соответствующих атрибутов элемента.

1 голос
/ 12 августа 2010

что-то вроде этого может работать

  $html = preg_replace_callback(
      '~((href|src)\s*=\s*[\"\'])([^\"\']+)~i', 
      'replace', 
      $html);

  function replace($x) {
     $url = $x[3];
     $url = your_url_conversion_function($url);
     return $x[1] . $url;
  }

это не удастся, если ваш HTML содержит внешние теги "href" или "src", как в <h1> how to use "src=" </h1>.Вот почему люди обычно предлагают специализированные парсеры, а не регулярные выражения для html.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...