Небольшая задачка по php Как реализовать без монструозного кода?

Loko
На сайте с 28.01.2007
Offline
101
510

Есть текст html ($content). В нем ссылки. Необходимо получить в массив все ссылки в виде <a href="###">Ccылко</a>

т.е. после прогона через функцию переменной $content она должна возвращать массив с сылками... что то вроде этого


function link_to_array($content){
//бла-бла-бла

return $link;

//в $link содержится примерно такая информация:
$link[0]="<a href="111">ссылка1</a>";
$link[1]="<a href="222">ссылка2</a>";
$link[2]="<a href="333">ссылка2</a>";

}

Хотя бы подскажите какую функцию для этого нужно использовать, если лень весь код написать...

aleksey_php
На сайте с 17.03.2008
Offline
53
#1

preg_match_all()

wdsg
На сайте с 09.02.2009
Offline
31
#2

Необходимая Вам функция выглядит примерно так:


function link_to_array($content){
preg_match_all ('|<a.* href=.*>.*</a>|U', $content, $links);
return $links[0];
}
Проектирование и разработка сложных IT-систем. Вожусь с проблемными задачами.
orphelin
На сайте с 02.07.2006
Offline
261
#3

у меня вот такая работает:

preg_match_all("!<a\s.*href=(.*)[ |>](.*)<.?/a>!Uism", $html[0],$link);	

правда там попадают туда же яваскрипты и ссылки mailto:, их я потом отдельно обрабатывал.

вот так весь кусок выглядит:

 
if($html[0])
{
// preg_match_all("!<a\s(.*?)href=(\s*?)\"?'?([^\"'\s>]+)\"?'?(\s*?)[^>]*>!is",$html,$link); // ищем ссылки на текущей странице
preg_match_all("!<a\s.*href=(.*)[ |>](.*)<.?/a>!Uism", $html[0],$link);
foreach ($link[1] as $k=>$v)
{
$link[1][$k]=str_replace($replace,"",$v);
if ((strstr($v,"javascript:")) or (strstr($v,"mailto:")) or ($v=="\"\"")) // удаляем почту и яваскрипты и пустые URL
{ //echo "\n<br>удаляем $v ($k)";
unset($link[1][$k]);
unset($link[2][$k]);
}
}
foreach ($link[2] as $k=>$v)
{
if ((strstr($v,"img")) and (strstr($v,"src"))) // заменяем картинки в анкорах на IMAGE
$link[2][$k]="IMAGE";
// $out[2][$k]=strstr($v,">");
}
foreach ($link[2] as $k=>$v)
{
$link[2][$k]=strip_tags($v);
}
foreach ($link[2] as $k=>$v)
{
if(stripos($v,">"))
$link[2][$k]=substr($v,stripos($v,">")+1); // вырезаем остатки тега <a>
}

просто сами теги <a> могут быть очень разнообразными, там и стили, и атрибуты и пробелы где не надо и т.п

orphelin добавил 03.05.2009 в 15:48

да, в моем случае просто нужно было отдельно url забрать и отдельно анкор, поэтому так сложно :)

Loko
На сайте с 28.01.2007
Offline
101
#4

Спасибо всем большое за помощь. Вроде разобрался :).

Авторизуйтесь или зарегистрируйтесь, чтобы оставить комментарий