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

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

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

 

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

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

тема: Заменить <http://link> на ссылки
 
 автор: kulibko   (28.11.2007 в 22:53)   письмо автору
 
 

Есть текст

$text = "<http://www.xoetrope.com/xui>  И пошел тут текст, в нем ссылка <http://test_me.ru/testing.php>, и опять текст, и опять ссылка <http://www.xoetrope.com/xui>";


Его нужно преобразовать - все штуки вида <http://link> сделать <a href='http://link'>http://link</a>

Использую ф-ю gm_edit_links($text)

Моя ф-я


function gm_edit_links($text){//редактируем линки из <http://www.xoetrope.com/xui> в обычные
    $page = preg_replace_callback("/<http:\/\/(.*)>/si", 'gm_create_link', $text);
    return $page;
}

function gm_create_link($matches){
//    print_r($matches);
    $link = $matches[1];
    return "<a href='http://$link'>$link</a>";
}


не справляется с задачей - например весь тот текст залазит в одну большущую ссылку

<a href='http://www.xoetrope.com/xui>  И пошел тут текст, в нем ссылка <http://test_me.ru/testing.php>, и опять текст, и опять ссылка <http://www.xoetrope.com/xui'>www.xoetrope.com/xui>  И пошел тут текст, в нем ссылка <http://test_me.ru/testing.php>, и опять текст, и опять ссылка <http://www.xoetrope.com/xui</a>


Подскажите пожалуйста как поправить :)

   
 
 автор: SHAman   (29.11.2007 в 00:41)   письмо автору
 
   для: kulibko   (28.11.2007 в 22:53)
 

<a href='http://www.xoetrope.com/xui> - это открывающий тег. Во всех ваших функциях вы не режете уже готовые ссылки. Нужно определиться: если в вашем исходном тексте есть реальные теги ссылок, то их можно резать, а можно оставлять. Если оставлять, то ваша функция работать должна. Если резать, то нужно резать предварительно.

Если в исходном тексте тегов ссылок нет, то у вас не верные исходные данные. Должно быть:


<http://www.xoetrope.com/xui>  И пошел тут текст, в нем ссылка <http://test_me.ru/testing.php>, и опять текст, и опять ссылка <http://www.xoetrope.com/xui'>www.xoetrope.com/xui>  И пошел тут текст, в нем ссылка <http://test_me.ru/testing.php>, и опять текст, и опять ссылка <http://www.xoetrope.com/xui>


Ну и потом, тут не нужен вызов функции. Ну честно:)

preg_replace_all("#<(http://.*?)>#i", "<a href='$$1'>$$1</a>", $text);

Не пробовал, но должно работать.

   
 
 автор: Faraon   (29.11.2007 в 08:49)   письмо автору
 
   для: SHAman   (29.11.2007 в 00:41)
 

В PHP просто preg_replace
preg_replace("#<(http://[^>]+)>#i", "<a href='$1'>$1</a>", $text); 

   
 
 автор: kulibko   (29.11.2007 в 09:36)   письмо автору
 
   для: Faraon   (29.11.2007 в 08:49)
 

это

preg_replace("#<(http://[^>]+)>#i", "<a href='$1'>$1</a>", $text); 

текст не изменило

   
 
 автор: Faraon   (29.11.2007 в 09:43)   письмо автору
 
   для: kulibko   (29.11.2007 в 09:36)
 

Что значит текст не изменило?
Разве под Ваш шаблон
<a href='http://link'>http://link</a>
не подходит?

   
 
 автор: kulibko   (29.11.2007 в 09:45)   письмо автору
 
   для: Faraon   (29.11.2007 в 09:43)
 

Идеально подходит, но такое чувство что регуляр неправильный - оно текст полностью прежним оставило.

$text = "<http://www.xoetrope.com/xui>  И пошел тут текст, в нем ссылка <http://test_me.ru/testing.php>, и опять текст, и опять ссылка <http://www.xoetrope.com/xui>";
preg_replace("#<(http://[^>]+)>#i", "<a href='$1'>$1</a>", $text); 
echo $text;


И текст каким был, таким и остался.

   
 
 автор: Faraon   (29.11.2007 в 10:04)   письмо автору
 
   для: kulibko   (29.11.2007 в 09:45)
 

А как текст должен измениться, чего то я не понимаю?
По вашему заданию надо было линки изменить
Н-да

   
 
 автор: kulibko   (29.11.2007 в 10:15)   письмо автору
 
   для: Faraon   (29.11.2007 в 10:04)
 

Текст должен был стать таким:


<a href='http://http://www.xoetrope.com/xui'>http://www.xoetrope.com/xui</a>  И пошел тут текст, в нем ссылка <a href='http://http://test_me.ru/testing.php'>http://test_me.ru/testing.php</a>, и опять текст, и опять ссылка <a href='http://http://www.xoetrope.com/xui'>http://www.xoetrope.com/xui</a>


А он не изменился.

   
 
 автор: Faraon   (29.11.2007 в 10:34)   письмо автору
 
   для: kulibko   (29.11.2007 в 10:15)
 

Ну а так результат такой же как у Шамана
preg_replace("#<(http://[^>]+)>#i", "<a href='$$1'>$$1</a>", $text);

   
 
 автор: kulibko   (29.11.2007 в 10:44)   письмо автору
 
   для: Faraon   (29.11.2007 в 10:34)
 

и так не изменило ничего...
у меня такое чувство что preg_replace не работает...

   
 
 автор: Faraon   (29.11.2007 в 10:47)   письмо автору
 
   для: kulibko   (29.11.2007 в 10:44)
 


$text1="<http://www.xoetrope.com/xui>  И пошел тут текст, в нем ссылка <http://test_me.ru/testing.php>, и опять текст, и опять ссылка <http://www.xoetrope.com/xui'>www.xoetrope.com/xui>  И пошел тут текст, в нем ссылка <http://test_me.ru/testing.php>, и опять текст, и опять ссылка <http://www.xoetrope.com/xui>";
$text1=preg_replace("#<(http://[^>]+)>#i", "<a href='$$1'>$$1</a>", $text1);
echo $text1;

   
 
 автор: kulibko   (29.11.2007 в 11:05)   письмо автору
 
   для: Faraon   (29.11.2007 в 10:47)
 

Спасибо огромое :)
Вот так

$text1=preg_replace("#<(http://[^>]+)>#i", "<a href='$1'>$1</a>", $text1);  

корректно все работает

   
 
 автор: kulibko   (29.11.2007 в 09:34)   письмо автору
 
   для: SHAman   (29.11.2007 в 00:41)
 

Спасибо большое :)
В свою ф-ю вместо своего регуляра поставил Ваш и все успешно заработало.
То что вызов ф-ии не нужен поверил :), но при попытке использовать Ваш код вываливается ошибка
Fatal error: Call to undefined function preg_replace_all()

   
 
 автор: Faraon   (29.11.2007 в 09:36)   письмо автору
 
   для: kulibko   (29.11.2007 в 09:34)
 

В PHP нет функции preg_replace_all()

   
 
 автор: SHAman   (29.11.2007 в 12:31)   письмо автору
 
   для: Faraon   (29.11.2007 в 09:36)
 

Угумс. Вот что значит ночью писать...:(

И все-таки человек не понял что я хотел сказать про исхоные данные...:(

   
Rambler's Top100
вверх

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