Warning: Cannot use a scalar value as an array in /home/admin/public_html/forum/include/fm.class.php on line 757

Warning: Invalid argument supplied for foreach() in /home/admin/public_html/forum/include/fm.class.php on line 770
Форумы портала PHP.SU :: Версия для печати :: С текста вытащить полностью http://dome/itd
Форумы портала PHP.SU » PHP » Регулярные выражения » С текста вытащить полностью http://dome/itd

Страниц (1): [1]
 

1. koras - 22 Сентября, 2010 - 16:27:24 - перейти к сообщению
Есть некий текст отправляемы пользователем в комментариях, причем текст может быть любого содержания, даже самого непредсказуемого с точками , запитыми и так далее.
Сперва мой текст проходит через



потом мне с текста, надо вытащить все ссылки, а с этих ссылок домен

например
Цитата:

Привет форумhttp://forum.php.su/post.php?act...ew&forum=4ла ла ла ла .
Всем желаю удачи и здоровья.А здесь самый лучший поиск здесь всё вместе, плохой пользовательgoogle.com/squared/search?q=european%20countries&suggest=1прам пам пам тро лоло. <a title="Зарегистрироваться на форуме" class="menu" href="http://www.yandex.ru//register.php?id_forum=6&hhasdasdasdasdasdtrolo">Регистрация</a>

То есть с данного примера комментариев некого пользователя мне надо вытащить.

forum.php.su и полностью ссылку http://forum.php.su/post.php?action=new&forum=4


www[dot]google[dot]com и полностью ссылку если нет даже http:// или www и подставить http:// google.com/squared/search?q=european%20countries&suggest=1

www[dot]yandex[dot]ru и полностью ссылку http://www.yandex.ru//register.php?id_forum=6&hhasdasdasdasdasdtrolo

То есть задача понятно думаю.

Потом соответственно всё это подставить в таком виде

$text = preg_replace($replace, '<a href="/url.php=$1">$2</right>', $text);

$1 = полностью ссылка
$2 = полностью домен

Что я только не перепробовал. Вроде ситуация банальна и вроде ничего сложного, но я просто запутался.
2. JustUserR - 23 Сентября, 2010 - 16:49:18 - перейти к сообщению
koras В приведенной вами постановки задачи требуется поиск всех вхождений URL-адресов в гиперссылках и их последующая модификация с добавлением перенаправляющего PHP-скрипта - в таком случае для обеспечения правильности передаваемого адреса необходимо провести его предварительное шифрование таким образом чтобы исходные компоненты не встречались в гиперссылки в исходном виде Кроме того после осуществления шифрования полученный URL-адрес может пресысить допустимый предел длины - в таком случае можно реализовать его временное сохранение в cookie-записи
3. koras - 23 Сентября, 2010 - 18:16:16 - перейти к сообщению
JustUserR
Если честно, то не догоняю.
Как провести шифрование, а потом сохранить в cookie, то есть для чего сохранять его в печенье, не вижу смысла или не улавливаю.

То что его определить, так это не сложно, в незашифрованом виде, для меня. А в зашифрованом, я даже не представляю, он увеличится в размере или уменшится, смотря чем шифровать и для чего.
4. XelaNimed - 23 Сентября, 2010 - 19:36:16 - перейти к сообщению
Сложно вытащить ссылку если к ней примыкает другой текст. В этом случае и сам не определишь где заканчивается ссылка.

Если ссылка будет заканчиваться закрывающей угловой скобкой, кавычкой или пробелом, то можно как-то так:
PHP:
скопировать код в буфер обмена
  1. preg_match_all('/([h][t][t][p][:][\/][\/]([^\/]+)[\/][^\s">]+)[\s">]/is',$subject,$matches);

Выдаст:
PHP:
скопировать код в буфер обмена
  1. Array $matches
  2. (
  3.     [0] => Array
  4.         (
  5.             [0] => http://forum.php.su/post.php?action=new&forum=4ла
  6.             [1] => http://www.yandex.ru//register.php?id_forum=6&hhasdasdasdasdasdtrolo"
  7.         )
  8.  
  9.     [1] => Array
  10.         (
  11.             [0] => http://forum.php.su/post.php?action=new&forum=4ла
  12.             [1] => http://www.yandex.ru//register.php?id_forum=6&hhasdasdasdasdasdtrolo
  13.         )
  14.  
  15.     [2] => Array
  16.         (
  17.             [0] => forum.php.su
  18.             [1] => www.yandex.ru
  19.         )
  20.  
  21. )

koras пишет:
если нет даже http:// или www

как же тогда определить что это действительно ссылка?! Например: google.com и text.txt или даже this.style и т.п.. Все возможные домены перебирать?! Туплю скорее всего...
5. koras - 23 Сентября, 2010 - 22:46:16 - перейти к сообщению
Цитата:
Сложно вытащить ссылку если к ней примыкает другой текст.

Я согласен с вами. Завтра ваш пример попробую с утричка.

Дело в том что пользователю, который плохо понивает, что такое ссылка , я уже не говорю о тэге <a> трудно обьяснить, что ссылки должны начинаться с http и по сторонам не должно быть лишнего текста и так далее.

Пишу портал как раз чтобы было интуитивно понятно и пользователь не думал о том, чтобы добавить ссылку в сообщение, ему необходимо нажать туда то или вставить в BB тэги, конечно для продвинутых я это уже реализовал как положено. Шаги пользователя сложно предсказать, но моя задача облегчить его жизнь на столько на сколько возвожно и чтобы пользователь непокинул сайт от того, что он не смог оставить коммент или ещё чего.


Упускаете текст ссылки (( &hhasdasdasdasdasdtrolo

Если ставить ссылку в рамки определённые, то ссылка должна заканчиваться пробелом, ковычками или же скобкой,

http://www[dot]google[dot]ru/#sclient=ps[dot][dot][dot]66a4a065ac9f0b09
6. Мелкий - 23 Сентября, 2010 - 23:18:25 - перейти к сообщению
koras пишет:
ссылка должна заканчиваться пробелом, ковычками или же скобкой,

точку и запятую ещё учтите. Как правило, за часть ссылки их считать не надо. Вот в таком случае, например:
пример пишет:
... если посмотреть example.net, то видно ...


XelaNimed,
[h][t][t][p][:][\/][\/] - а что так интересно пишете? можно же сразу http:\/\/

Кстати, не забудьте, хоть и редко встречающиеся, но абсолютно легальные ссылки с указанием номера порта, да и https:// тоже
Вот такой вариант нашёл на просторах рунета: #(^|\s|\()((http(s?)://)|(www\[dot]))(\w+[^\s\)\<]+)#i

А имя домена вырезать просто, если есть сам url - parseurl
7. JustUserR - 24 Сентября, 2010 - 00:35:56 - перейти к сообщению
koras пишет:
Как провести шифрование, а потом сохранить в cookie, то есть для чего сохранять его в печенье, не вижу смысла или не улавливаю.
Для корректного использования перенаправляющего PHP-скрмипа необходимо - произвести генерацию гиперссылки с URL-адресом содержащим его путь вызова и параметр представляющий собой запрашиваемый web-ресурс Для сохранения правмильности строки запроса и уровня трактования ее конмонентов она не должна содержать какие-либо спецсимволы - в частности это означает необходимость ее urlencode-шифрования для приведения ее в унифицированный вид - тем не менее такая операция может привести к существенному увеличению ее размера до некоторого ограничительно предела при переходе через который гиперссылка прекращает функционировать - тем не менее при отсутсвии использования POST-запроса в качестве дополнительного средства передачи можно использовать cookie-записи или управляющим JS-скрипт
8. XelaNimed - 24 Сентября, 2010 - 02:47:59 - перейти к сообщению
Мелкий пишет:
а что так интересно пишете?

затупил...
9. koras - 24 Сентября, 2010 - 16:32:11 - перейти к сообщению
JustUserRВы правильно говорите, потому что в урле встречаются запятые и точки и так далее, просто они закодированы /

Да но чтобы произвести шифрование, надо сперва эту ссылку вытащить с текста. У меня данные отправляются от клиента по средством JS + ajax методом POST
(Добавление)
Пришел к такому выводу
PHP:
скопировать код в буфер обмена
  1.  
  2.  $replace="/(http|https|ftp):\/\/(([\.\-_a-zA-Z0-9]{1,100}[.]+[A-Za-z]{2,5})[\/]+([\[\]\.\_a-zA-Z0-9\(\)\&\;\$\?\/\.\-\=\%]+))/si";
  3.  
10. JustUserR - 25 Сентября, 2010 - 12:58:08 - перейти к сообщению
koras пишет:
Да но чтобы произвести шифрование, надо сперва эту ссылку вытащить с текста
Для того чтобы произвести более компактный вариант шифрования не требующий двойного уровня вложенности элементов можно исползовать такую схему - сначала требуемая ссылка разбирается на ее основной web-путь и набор аргументов в зашифрованной форме - после чего производится покомпоненнтое перекодирование с добавление чистого URL-пти в виде дополнительного аргумента - и проксирующий PHP-скрипт получает набор аргументов шифрования первого уровня и дополнительный параметр в виде web-адреса

 

Powered by ExBB FM 1.0 RC1