[ Поиск ] - [ Пользователи ] - [ Календарь ]
Полная Версия: обработка ссылок в тексте - закрытие от поисковико
mr.unknown
Доброго времени суток, коллеги!

Помогите решить задачу, суть в следущем:
Есть текст
Цитата

Исследования ученых из Флоридского музея естественной истории в Гейснвилле показали, что некоторые виды акул совершенно точно могут определить направление своего движения. Отплыв из первоначальной точки на расстояние до 50 км, они могут вернуться в ту же точку с точностью практически до метра.
Однако такое свойство есть не у всех акул. Американские ученые проанализировали траектории движения тигровых акул (с помощью акустических датчиков, закрепленных на их телах) и выяснили, что  эти акулы безошибочно определяют направление своего движения. В то время как, черноплавниковые акулы такого поведения не продемонстрировали.  Акулы-молоты также могут определять направления своего движения, однако, в гораздо меньших масштабах по сравнению с тигровыми.
Цель исследования была показать, что тигровые акулы и акулы-молоты не плавают хаотично. Они всегда знают направление своего движения, т.е. они точно знают, куда им нужно плыть. И исследователи пытались найти ответ на вопрос, откуда они это могут знать.
Акулы одни из немногих живых существ, которые активно используют информацию магнитных полей. И это может быть одним из обряснений.
Другим объяснением является то, что акулы для определения расстоянию ориентируются на температуру воды, запахи и океанические течения. При этом, их внутренние  «навигационные системы» должны быть очень мощными, поскольку они покрывают огромные расстояния.
Также исследования показали, что взрослые особи молотов ориентируются в пространстве гораздо лучше, чем молодняк. Очевидно, ментальные карты акул формируются с возрастом.
Отличия в умениях ориентироваться у разных видов акул, по-видимому, объясняются разным ареалом их обитания. Черноплавниковые акулы живут в сравнительно небольшом ареале рифов Тихого океана. В то время, как тигровые акулы перемещаются на огромные расстояния, уплывая далеко от своего обычного дома. Некоторые датчики были обнаружены на расстоянии более 3000 км от места, где они были прикреплены.

По материалам сайта http://www.bbc.co.uk


Из ссылки http://www.bbc.co.uk нужно сделать
<noindex><a href="http://www.bbc.co.uk" rel="nofollow">http://www.bbc.co.uk</a></noindex>

При том повторная обработка функцией не должна уже "деформировать" готовое.

Додумался пока до такого решения:


function link_no_index($str)
{
$str = trim($str);
if(preg_match_all('/http\:\/\/(.*?)[\s\r\n\t]/i', $str, $mLinks))
{
$arReplace = array();
foreach($mLinks[1] as $sLink)
$arReplace[] = '<noindex><a rel="nofollow" href="http://'.$sLink.'">'.$sLink.'</a></noindex>';
$str = str_replace($mLinks[0], $arReplace, $str);
}
return $str;
}


Но он не всегда корректно отрабатывает.

Например просто с текстом
Цитата

обнаружены на расстоянии более 3000 км от места, где они были прикреплены.

По материалам сайта http://www.bbc.co.uk


Всё ок.

Подскажите если не сложно где не прав, думаю многим понадобится такая функция !
Заранее спасибо!



Спустя 5 часов, 17 минут, 59 секунд (25.04.2011 - 16:57) liw написал(а):
Ну например так:

print preg_replace('/(?<!href=")(http\:\/\/[^<]+)(?!=<\/a>)/Dui','<noindex><a rel="nofollow" href="$1">$1</a></noindex>', $html);



А вообще html надо мучать с помощью phpQuery и т.п.

Спустя 16 часов, 36 минут, 34 секунды (26.04.2011 - 09:34) mr.unknown написал(а):


$str = 'Исследования ученых из Флоридского музея естественной истории в Гейснвилле показали, что некоторые виды акул совершенно точно могут определить направление своего движения. Отплыв из первоначальной точки на расстояние до 50 км, они могут вернуться в ту же точку с точностью практически до метра.
Однако такое свойство есть не у всех акул. Американские ученые проанализировали траектории движения тигровых акул (с помощью акустических датчиков, закрепленных на их телах) и выяснили, что эти акулы безошибочно определяют направление своего движения. В то время как, черноплавниковые акулы такого поведения не продемонстрировали. Акулы-молоты также могут определять направления своего движения, однако, в гораздо меньших масштабах по сравнению с тигровыми.
Цель исследования была показать, что тигровые акулы и акулы-молоты не плавают хаотично. Они всегда знают направление своего движения, т.е. они точно знают, куда им нужно плыть. И исследователи пытались найти ответ на вопрос, откуда они это могут знать.
Акулы одни из немногих живых существ, которые активно используют информацию магнитных полей. И это может быть одним из обряснений.
Другим объяснением является то, что акулы для определения расстоянию ориентируются на температуру воды, запахи и океанические течения. При этом, их внутренние «навигационные системы» должны быть очень мощными, поскольку они покрывают огромные расстояния.
Также исследования показали, что взрослые особи молотов ориентируются в пространстве гораздо лучше, чем молодняк. Очевидно, ментальные карты акул формируются с возрастом.
Отличия в умениях ориентироваться у разных видов акул, по-видимому, объясняются разным ареалом их обитания. Черноплавниковые акулы живут в сравнительно небольшом ареале рифов Тихого океана. В то время, как тигровые акулы перемещаются на огромные расстояния, уплывая далеко от своего обычного дома. Некоторые датчики были обнаружены на расстоянии более 3000 км от места, где они были прикреплены.

По материалам сайта http://www.bbc.co.uk'
;
print preg_replace('/(?<!href=")(http\:\/\/[^<]+)(?!=<\/a>)/Dui','<noindex><a rel="nofollow" href="$1">$1</a></noindex>', $str);




Пусто...

Спустя 3 минуты, 41 секунда (26.04.2011 - 09:37) alex12060 написал(а):
Тут простым ЖС можно сделать...

Спустя 10 минут, 10 секунд (26.04.2011 - 09:47) mr.unknown написал(а):
Цитата

А вообще html надо мучать с помощью phpQuery и т.п.


В предоставленном, исходном тексте представлен текст. Обычный текст, в котором URL и из которогу уже нужен html



Тут простым ЖС можно сделать...


Можно, но нужно php.

Спустя 5 минут, 7 секунд (26.04.2011 - 09:53) alex12060 написал(а):
Цитата
Можно, но нужно php.


Это принципиально?

Спустя 5 минут, 23 секунды (26.04.2011 - 09:58) mr.unknown написал(а):
Цитата (alex12060 @ 26.04.2011 - 06:53)
Цитата
Можно, но нужно php.


Это принципиально?

К сожалению да, это внутренний обработчик на обновление новости.

Спустя 1 час, 6 минут, 19 секунд (26.04.2011 - 11:04) liw написал(а):
При запуске:

<?php

$str = 'Исследования ученых из Флоридского музея естественной истории в Гейснвилле показали, что некоторые виды акул совершенно точно могут определить направление своего движения. Отплыв из первоначальной точки на расстояние до 50 км, они могут вернуться в ту же точку с точностью практически до метра.
Однако такое свойство есть не у всех акул. Американские ученые проанализировали траектории движения тигровых акул (с помощью акустических датчиков, закрепленных на их телах) и выяснили, что эти акулы безошибочно определяют направление своего движения. В то время как, черноплавниковые акулы такого поведения не продемонстрировали. Акулы-молоты также могут определять направления своего движения, однако, в гораздо меньших масштабах по сравнению с тигровыми.
Цель исследования была показать, что тигровые акулы и акулы-молоты не плавают хаотично. Они всегда знают направление своего движения, т.е. они точно знают, куда им нужно плыть. И исследователи пытались найти ответ на вопрос, откуда они это могут знать.
Акулы одни из немногих живых существ, которые активно используют информацию магнитных полей. И это может быть одним из обряснений.
Другим объяснением является то, что акулы для определения расстоянию ориентируются на температуру воды, запахи и океанические течения. При этом, их внутренние «навигационные системы» должны быть очень мощными, поскольку они покрывают огромные расстояния.
Также исследования показали, что взрослые особи молотов ориентируются в пространстве гораздо лучше, чем молодняк. Очевидно, ментальные карты акул формируются с возрастом.
Отличия в умениях ориентироваться у разных видов акул, по-видимому, объясняются разным ареалом их обитания. Черноплавниковые акулы живут в сравнительно небольшом ареале рифов Тихого океана. В то время, как тигровые акулы перемещаются на огромные расстояния, уплывая далеко от своего обычного дома. Некоторые датчики были обнаружены на расстоянии более 3000 км от места, где они были прикреплены.

По материалам сайта http://www.bbc.co.uk'
;

print preg_replace('/(?<!href=")(http\:\/\/[^<]+)(?!=<\/a>)/Dui','<noindex><a rel="nofollow" href="$1">$1</a></noindex>', $str);

?>


Результат:

Исследования ученых из Флоридского музея естественной истории в Гейснвилле показали, что некоторые виды акул совершенно точно могут определить направление своего движения. Отплыв из первоначальной точки на расстояние до 50 км, они могут вернуться в ту же точку с точностью практически до метра.
Однако такое свойство есть не у всех акул. Американские ученые проанализировали траектории движения тигровых акул (с помощью акустических датчиков, закрепленных на их телах) и выяснили, что эти акулы безошибочно определяют направление своего движения. В то время как, черноплавниковые акулы такого поведения не продемонстрировали. Акулы-молоты также могут определять направления своего движения, однако, в гораздо меньших масштабах по сравнению с тигровыми.
Цель исследования была показать, что тигровые акулы и акулы-молоты не плавают хаотично. Они всегда знают направление своего движения, т.е. они точно знают, куда им нужно плыть. И исследователи пытались найти ответ на вопрос, откуда они это могут знать.
Акулы одни из немногих живых существ, которые активно используют информацию магнитных полей. И это может быть одним из обряснений.
Другим объяснением является то, что акулы для определения расстоянию ориентируются на температуру воды, запахи и океанические течения. При этом, их внутренние «навигационные системы» должны быть очень мощными, поскольку они покрывают огромные расстояния.
Также исследования показали, что взрослые особи молотов ориентируются в пространстве гораздо лучше, чем молодняк. Очевидно, ментальные карты акул формируются с возрастом.
Отличия в умениях ориентироваться у разных видов акул, по-видимому, объясняются разным ареалом их обитания. Черноплавниковые акулы живут в сравнительно небольшом ареале рифов Тихого океана. В то время, как тигровые акулы перемещаются на огромные расстояния, уплывая далеко от своего обычного дома. Некоторые датчики были обнаружены на расстоянии более 3000 км от места, где они были прикреплены.

По материалам сайта <noindex><a rel="nofollow" href="http://www.bbc.co.uk">http://www.bbc.co.uk</a></noindex>



Как то я не особо представляю почему у тебя пусто. Перепроверь ещё раз, мож где косяк, - у меня нет вариантов.

Спустя 30 минут, 30 секунд (26.04.2011 - 11:35) liw написал(а):
Кстати да, там ещё пробел нужен в регулярке:

preg_replace('/(?<!href=")(http\:\/\/[^ <]+)(?!=<\/a>)/Dui','<noindex><a rel="nofollow" href="$1">$1</a></noindex>', $str);

Спустя 31 минута, 47 секунд (26.04.2011 - 12:07) mr.unknown написал(а):
Цитата (liw @ 26.04.2011 - 08:35)
Кстати да, там ещё пробел нужен в регулярке:

preg_replace('/(?<!href=")(http\:\/\/[^ <]+)(?!=<\/a>)/Dui','<noindex><a rel="nofollow" href=""></a></noindex>', $str);

Пусто блин sad.gif
Тоже что то нету идей почему может так.

Спустя 1 час, 5 минут, 9 секунд (26.04.2011 - 13:12) liw написал(а):
Вообще какие нибудь регулярки работают?
error_reporting включен(/а)?
Версия php какая?
добавь до и после регулярки print на крайняк, - печатает ли текст вообще?

Спустя 8 минут, 32 секунды (26.04.2011 - 13:20) mr.unknown написал(а):
PHP Version 5.2.6-3ubuntu4.5

error_reporting(E_ALL);
ничего не выдаёт.


регулярки по сайту работают.

Спустя 2 часа, 17 минут, 4 секунды (26.04.2011 - 15:37) liw написал(а):
Как настроен php? Если FPM например, то ошибки по умолчанию в логе.

В любом случае preg_replace должна вернуть строку исходную, если ничего не совпало (ну да, если совпала вся строка и замена была на а пустую строку, - конечно в результате будет пустая строка)

Ставил ли print перед и после регулярки? Если да и при это пустая страница - то это Parse error с ошибкой в логе.




Спустя 1 час, 41 минута, 27 секунд (26.04.2011 - 17:19) Ulan написал(а):
нужно либо файл кодировать в UTF, либо в регулярке убрать модификатор u

Спустя 11 минут, 12 секунд (26.04.2011 - 17:30) liw написал(а):
Да спасибо, я не учёл что может быть не utf.

Спустя 12 часов, 33 минуты, 12 секунд (27.04.2011 - 06:03) mr.unknown написал(а):
Цитата (Ulan @ 26.04.2011 - 14:19)
нужно либо файл кодировать в UTF, либо в регулярке убрать модификатор u

опа, извиняюсь за невнимательность.

Результат выдаёт.
Можно ли решить - а точнее запретить повторную обработку, при повторном вызове функции.
Всё что обработанно в закрытые ссылки - не обрабатывалось ещё раз.


Вторая прогонка

Исследования ученых из Флоридского музея естественной истории в Гейснвилле показали, что некоторые виды акул совершенно точно могут определить направление своего движения. Отплыв из первоначальной точки на расстояние до 50 км, они могут вернуться в ту же точку с точностью практически до метра.
Однако такое свойство есть не у всех акул. Американские ученые проанализировали траектории движения тигровых акул (с помощью акустических датчиков, закрепленных на их телах) и выяснили, что эти акулы безошибочно определяют направление своего движения. В то время как, черноплавниковые акулы такого поведения не продемонстрировали. Акулы-молоты также могут определять направления своего движения, однако, в гораздо меньших масштабах по сравнению с тигровыми.
Цель исследования была показать, что тигровые акулы и акулы-молоты не плавают хаотично. Они всегда знают направление своего движения, т.е. они точно знают, куда им нужно плыть. И исследователи пытались найти ответ на вопрос, откуда они это могут знать.
Акулы одни из немногих живых существ, которые активно используют информацию магнитных полей. И это может быть одним из обряснений.
Другим объяснением является то, что акулы для определения расстоянию ориентируются на температуру воды, запахи и океанические течения. При этом, их внутренние «навигационные системы» должны быть очень мощными, поскольку они покрывают огромные расстояния.
Также исследования показали, что взрослые особи молотов ориентируются в пространстве гораздо лучше, чем молодняк. Очевидно, ментальные карты акул формируются с возрастом.
Отличия в умениях ориентироваться у разных видов акул, по-видимому, объясняются разным ареалом их обитания. Черноплавниковые акулы живут в сравнительно небольшом ареале рифов Тихого океана. В то время, как тигровые акулы перемещаются на огромные расстояния, уплывая далеко от своего обычного дома. Некоторые датчики были обнаружены на расстоянии более 3000 км от места, где они были прикреплены.

По материалам сайта <noindex><a rel="nofollow" href="http://www.bbc.co.uk"><noindex><a rel="nofollow" href="http://www.bbc.co.uk">http://www.bbc.co.uk</a></noindex></a></noindex>

Спустя 4 часа, 17 минут, 7 секунд (27.04.2011 - 10:20) liw написал(а):
Одну проверку добавил, вторую пропустил.

preg_replace('/(?<!href=")(?<!>)(http\:\/\/[^ <]+)(?!=<\/a>)/Di','<noindex><a rel="nofollow" href="$1">$1</a></noindex>', $html);

Спустя 3 часа, 19 минут, 13 секунд (27.04.2011 - 13:39) mr.unknown написал(а):
Спасибо большое всем ! rolleyes.gif
Кажется всё ништяк ! wink.gif
Быстрый ответ:

 Графические смайлики |  Показывать подпись
Здесь расположена полная версия этой страницы.
Invision Power Board © 2001-2024 Invision Power Services, Inc.