Форум: Форум PHPФорум ApacheФорум Регулярные ВыраженияФорум MySQLHTML+CSS+JavaScriptФорум FlashРазное
Новые темы: 0000000
PHP. Практика создания Web-сайтов (второе издание). Авторы: Кузнецов М.В., Симдянов И.В. PHP 5/6. В подлиннике. Авторы: Кузнецов М.В., Симдянов И.В. PHP 5. На примерах. Авторы: Кузнецов М.В., Симдянов И.В., Голышев С.В. MySQL на примерах. Авторы: Кузнецов М.В., Симдянов И.В. Программирование. Ступени успешной карьеры. Авторы: Кузнецов М.В., Симдянов И.В.
ВСЕ НАШИ КНИГИ
Консультационный центр SoftTime

Форум Регулярные Выражения

Выбрать другой форум

 

Здравствуйте, Посетитель!

вид форума:
Линейный форум Структурный форум

тема: найти все ссылки в тексте
 
 автор: admiral   (31.01.2011 в 15:35)   письмо автору
 
 

есть текст, мне нужно найти все ссылки в тексте, а именно адрес ссылки и применить к адресу функцию urldecode

  Ответить  
 
 автор: cheops   (31.01.2011 в 16:23)   письмо автору
 
   для: admiral   (31.01.2011 в 15:35)
 

Это обычный plain-текст, не HTML? Ссылки все начинаются http:// или www или они могут быть в любом формате?

PS Хорошо бы примерчик текста увидеть.

  Ответить  
 
 автор: admiral   (31.01.2011 в 16:34)   письмо автору
 
   для: cheops   (31.01.2011 в 16:23)
 

вот пример
Существует множество различных <a href="http://сайт.рф/поисковые_решения">решений поиска даных, одно из них можно найти на <a href="/решение">нашем сайте</a></a>

  Ответить  
 
 автор: cheops   (31.01.2011 в 16:38)   письмо автору
 
   для: admiral   (31.01.2011 в 16:34)
 

Не поучения ради, а интереса для, а почему ссылки вложенные (вроде как внутренняя не должна работать)?

PS Решение сейчас постараюсь подготовить.

  Ответить  
 
 автор: admiral   (31.01.2011 в 16:44)   письмо автору
 
   для: cheops   (31.01.2011 в 16:38)
 

>Не поучения ради, а интереса для, а почему ссылки вложенные (вроде как внутренняя не должна работать)?
>
>PS Решение сейчас постараюсь подготовить.

  Ответить  
 
 автор: cheops   (31.01.2011 в 16:43)   письмо автору
 
   для: admiral   (31.01.2011 в 16:34)
 

Можно начать отталкивать от такого скрипта
<?php
  $text 
'Существует множество различных 
  <a href="http://сайт.рф/поисковые_решения">решений поиска даных, 
  одно из них можно найти на <a href="/решение">нашем сайте</a></a>'
;
  
$pattern "|<a href=\"([^\"]+)\">|is";
  
$text preg_replace_callback($pattern"replace_url"$text);
  echo 
$text;

  function 
replace_url($out)
  {
    return 
"<a href=\"".rawurlencode($out[1])."\">";
  }
?>

Он конечно преобразует все подряд, но доработать его до нужно кондиции можно.

  Ответить  
 
 автор: admiral   (31.01.2011 в 16:46)   письмо автору
 
   для: cheops   (31.01.2011 в 16:43)
 

я в примере ошибся, нечайно в сылке прописал еще ссылку. такого быть не может. прошу прощенияч спешил)) теперь понял почему вы спрсоили)

  Ответить  
 
 автор: admiral   (31.01.2011 в 16:50)   письмо автору
 
   для: cheops   (31.01.2011 в 16:43)
 

абсолютную ссылку неверно обрабатывает(

  Ответить  
 
 автор: cheops   (31.01.2011 в 16:52)   письмо автору
 
   для: admiral   (31.01.2011 в 16:50)
 

А как надо, чтобы / игнорировались или проблема в чем-то другом?

  Ответить  
 
 автор: admiral   (31.01.2011 в 16:58)   письмо автору
 
   для: cheops   (31.01.2011 в 16:52)
 

он добавляет 2 раза http и причем свой собственный домен, вот какполучилось с вашего скрипта

http://site/http%3A%2F%2F%F1%E0%E9%F2.%F0%F4%2F%EF%EE%E8%F1%EA%EE%E2%FB%E5_%F0%E5%F8%E5%ED%E8%FF


Исходный пример (правильный)

<?php
  $text 
'Существует множество различных
  <a href="http://сайт.рф/поисковые_решения">решений поиска даных</a>,
  одно из них можно найти на <a href="/решение">нашем сайте</a>'
;
  
$pattern "|<a href=\"([^\"]+)\">|is";
  
$text preg_replace_callback($pattern"replace_url"$text);
  echo 
$text;

  function 
replace_url($out)
  {
    return 
"<a href=\"".urlencode($out[1])."\">";
  }
?>

  Ответить  
 
 автор: admiral   (31.01.2011 в 17:00)   письмо автору
 
   для: admiral   (31.01.2011 в 16:58)
 

блин обрезает
http://site/http%3A%2F%2F%F1%E0%E9%F2.%F0%F4%2F%EF%EE%E8%F1%EA%EE%E2%FB%E5_%F0%E5%F8%E5%ED%E8%FF

  Ответить  
 
 автор: cheops   (31.01.2011 в 17:02)   письмо автору
237 байт
 
   для: admiral   (31.01.2011 в 16:58)
 

Хм... не наблюдаю такого, скрипт точно не подвергался изменениям? Мой результат во вложении - он совпадает с вашим?

  Ответить  
 
 автор: admiral   (31.01.2011 в 17:10)   письмо автору
 
   для: cheops   (31.01.2011 в 17:02)
 

<?php
  $text 
'Существует множество различных
  <a href="http://сайт.рф/поисковые_решения">решений поиска даных</a>,
  одно из них можно найти на <a href="/решение">нашем сайте</a>'
;
  
$pattern "|<a href=\"([^\"]+)\">|is";
  
$text preg_replace_callback($pattern"replace_url"$text);
  echo 
$text;

  function 
replace_url($out)
  {
    return 
"<a href=\"".rawurlencode($out[1])."\">";
  }
?>


У вас этот пример нормально работает?
У меня первый адрес получается такой
http://oszn/http%3A%2F%2F%F1%E0%E9%F2.%F0%F4%2F%EF%EE%E8%F1%EA%EE%E2%FB%E5_%F0%E5%F8%E5%ED%E8%FF

  Ответить  
 
 автор: cheops   (31.01.2011 в 17:13)   письмо автору
 
   для: admiral   (31.01.2011 в 17:10)
 

Хм... более чем странно, oszn вроде вообще нигде нет... У меня первая ссылка такая получилось (скрипт скопировал, использовал кодировку win-1251)
http%3A%2F%2F%F1%E0%E9%F2.%F0%F4%2F%EF%EE%E8%F1%EA%EE%E2%FB%E5_%F0%E5%F8%E5%ED%E8%FF

  Ответить  
 
 автор: admiral   (31.01.2011 в 17:16)   письмо автору
 
   для: cheops   (31.01.2011 в 17:13)
 

у меня просто имя локального домена oszn, и еще реврайт в htaccess

Options +FollowSymLinks
RewriteEngine On

RewriteCond %{QUERY_STRING} http\: [OR]
RewriteCond %{QUERY_STRING} \[ [OR]
RewriteCond %{QUERY_STRING} \] [OR]
RewriteCond %{QUERY_STRING} (\<|%3C).*script.*(\>|%3E) [NC,OR]
RewriteCond %{QUERY_STRING} GLOBALS(=|\[|\%[0-9A-Z]{0,2}) [OR]
RewriteCond %{QUERY_STRING} _REQUEST(=|\[|\%[0-9A-Z]{0,2})
RewriteRule ^.*$ - [F,L]
RewriteCond %{REQUEST_FILENAME} !-f
RewriteCond %{REQUEST_FILENAME} !-d
RewriteRule ^(.+)$ index.php?page=$1 [QSA]

  Ответить  
Rambler's Top100
вверх

Rambler's Top100 Яндекс.Метрика Яндекс цитирования