PHP

Вырезание URL из текста и кривых HTML-файлов

Иногда нужно вырезать из HTML-текст ссылки на URL или Email. Если у вас в HTML нет заведомо кривого кода, то это очень простая задача на регулярное выражение типа
<a[^>]+href=([^ >]+)[^>]*>(.*?)</a>

Но ссылки бывают разные... Как делать вашу программу, решать вам. Можно брать только 100% верные ссылки, но тогда некоторые кривые сслыки не попадут (хотя они тоже верные). Можно брать все подряд, но тогда кое-какие ссылки будут не совсем корректно вырезаться.

Текст программы:
<?

   $str="
   <a href=url1>name1</a>
   <a href=url2>name2</a>
   <a href='url3'>name3</a>
   <a href=url4>< скобки ></a>
   <a href="url5"><b>жирно</b></a>
   <a href=url6>"кавычки"</a>
   <a target="<попытка обхитрить программу> хахаха" href=url7>77777</a>
   <a href=url8 target="<попытка обхитрить программу> хахаха" >88888</a>";

   echo "<pre>Исходный код:".htmlspecialchars($str)."</pre>";

   echo "---------------Вариант 1---------------";

   preg_match_all("!<a.*?href="?'?([^ "'>]+)"?'?.*?>(.*?)</a>!is",$str,$ok);

   for ($i=0; $i<count($ok[1]); $i++) {
      echo "<li>".$ok[1][$i]." - ".$ok[2][$i];
   }

   echo "<br>---------------Вариант 2---------------";

   preg_match_all("!<a[^>]+href="?'?([^ "'>]+)"?'?[^>]*>(.*?)</a>!is",$str,$
ok);
   for ($i=0; $i<count($ok[1]); $i++) {
      echo "<li>".$ok[1][$i]." - ".$ok[2][$i];
   }

   echo "<br>---------------Вариант 3---------------";

   preg_match_all("!<a[^>]+href="?'?([^ "'>]+)"?'?[^>]*>([^<>]*?)</a>!is",$s
tr,$ok);
   for ($i=0; $i<count($ok[1]); $i++) {
      echo "<li>".$ok[1][$i]." - ".$ok[2][$i];
   }


?>

Результат исполнения примера:

Исходный код:
   <a href=url1>name1</a>
   <a href=url2>name2</a>
   <a href='url3'>name3</a>
   <a href=url4>< скобки ></a>
   <a href="url5"><b>жирно</b></a>
   <a href=url6>"кавычки"</a>
   <a target="<попытка обхитрить программу> хахаха" href=url7>77777</a>
   <a href=url8 target="<попытка обхитрить программу> хахаха" >88888</a>


---------------Вариант 1---------------

url1 - name1

url2 - name2

url3 - name3

url4 - < скобки >

url5 - жирно

url6 - "кавычки"

url7 - 77777

url8 - хахаха" >88888

---------------Вариант 2---------------

url1 - name1

url2 - name2

url3 - name3

url4 - < скобки >

url5 - жирно

url6 - "кавычки"

url8 - хахаха" >88888

---------------Вариант 3---------------

url1 - name1

url2 - name2

url3 - name3

url6 - "кавычки"
Теги:
URL
Добавлено: 16 Мая 2018 20:33:44 Добавил: Андрей Ковальчук Нравится 0
Добавить
Комментарии:
Нету комментариев для вывода...