Правила     Закладки     Карма    Календарь    Журналы    Помощь    Поиск    PDA    Чат   
        СМС-ки
   
Пейджер выключен!
 
Фильтр авторов:    показать 
  скрыть
  Ответ в темуСоздание новой темыСоздание опроса

> замена url на "a href" помогите доделать
Snake22  
 ۩  Дата
Цитировать сообщение

Пользователя сейчас нет на форуме



Новичок
*

Профиль
Группа: Пользователь
Сообщений: 19
Пользователь №: 35265
На форуме: 12 лет, 5 месяцев, 21 день
Карма:




понадобилась регулярка для замены ссылок вида http://site.ru или www.site.ru на кликабельную ссылку вида <a href...>
сам я в регулярках плохо шарю и поэтому решил первым делом поискать готовые решения.
но почти все они с косяками,например ни в одном примере почему то не нашел такую регулярку которая бы НЕ заменяла текст в уже сформированной <a href ссылке. (не отрицаю что мог плохо искать!)

отчаявшись начал изучать регулярки сам, кое как написал почти рабочий вариант (кстати процесс изучения то интересный оказался),но он мне в начало ссылки вставляет символ переноса. никак не знаю как его убрать оттуда.
то есть например ссылку http://site.ru моё выражение заменит на
<a href=" http://site.ru">http://site.ru</a> (обратить внимание тут типа перенос сразу после кавычки href=" http )
вот мой код:

<?php
// текст ссылок
$text='http://site1.ru <br>
www.site2.ru <br>
<a href="http://site3.ru" target=_blank>site3.ru</a> (в этой строчке ничего заменятся не должно так как изначально кликабельная ссылка)
'
;
//текст ссылок END


//заменяем все http:// ссылки

$text = preg_replace("#(\s|^)http://[^\s\[<]+#i",
"<a href=\"$0\" target=_blank><u>\$0</u></a>",
(
stripslashes($text)));

//заменяем оставшиеся www ссылки, которые без http://
$text = preg_replace("#(\s|^)www.[^\s\[<]+#i",
"<a href=\"http://$0\" target=_blank><u>\$0</u></a>",
(
stripslashes($text)));

echo $text."<br><br>";
?>
PMПисьмо на e-mail пользователю
    0   Для быстрого поиска похожих сообщений выделите 1-2 слова в тексте и нажмите сюда Для быстрой цитаты из этого сообщения выделите текст и нажмите сюда
Snake22  
 ۩  Дата
Цитировать сообщение

Пользователя сейчас нет на форуме



Новичок
*

Профиль
Группа: Пользователь
Сообщений: 19
Пользователь №: 35265
На форуме: 12 лет, 5 месяцев, 21 день
Карма:




хмм вроде получилось. всего лишь убрал \s| и оставил только ^
то есть так
$text = preg_replace("#(^)http://[^\s\[<]+#i",  
"<a href=\"$0\" target=_blank><u>\$0</u></a>",
(
stripslashes($text)));


а нет! блин! в таком случае тока заменяется если слово http:// стоит в самом начале строки.

Это сообщение отредактировал Snake22 - 12.04.2013 - 12:59
PMПисьмо на e-mail пользователю
    0   Для быстрого поиска похожих сообщений выделите 1-2 слова в тексте и нажмите сюда Для быстрой цитаты из этого сообщения выделите текст и нажмите сюда
OleKh  
Дата
Цитировать сообщение

Пользователя сейчас нет на форуме



Здесь живет
******

Профиль
Группа: Форумчанин
Завсегдатай форума
Сообщений: 753
Пользователь №: 32032
На форуме: 12 лет, 11 месяцев, 16 дней
Карма: 18




$text = preg_replace('#(^|[^"])((?:www|http)[^\s]+\.\w\w)#i',
"<a href=\"$0\" target=_blank><u>\$0</u></a>",
(
stripslashes($text)));
PMПисьмо на e-mail пользователю
    0   Для быстрого поиска похожих сообщений выделите 1-2 слова в тексте и нажмите сюда Для быстрой цитаты из этого сообщения выделите текст и нажмите сюда
Snake22  
 ۩  Дата
Цитировать сообщение

Пользователя сейчас нет на форуме



Новичок
*

Профиль
Группа: Пользователь
Сообщений: 19
Пользователь №: 35265
На форуме: 12 лет, 5 месяцев, 21 день
Карма:




OleKh спасибо. только всё равно в результатирующей ссылке перенос вставляется.
вот такой пример текста

$text='http://site1.ru <br>
http://site2.ru <br>
www.site3.ru <br>
<a href="http://site4.ru" target=_blank>site4.ru</a> (в этой строчке ничего заменятся не должно так как изначально кликабельная ссылка)
'
;

то есть первая ссылка,которая начинается с начала строки,заменилась нормально без переноса.а в остальные строки вставился перенос.

вот бы как нить к $0 применить trim

Это сообщение отредактировал Snake22 - 12.04.2013 - 13:13
PMПисьмо на e-mail пользователю
    0   Для быстрого поиска похожих сообщений выделите 1-2 слова в тексте и нажмите сюда Для быстрой цитаты из этого сообщения выделите текст и нажмите сюда
OleKh  
Дата
Цитировать сообщение

Пользователя сейчас нет на форуме



Здесь живет
******

Профиль
Группа: Форумчанин
Завсегдатай форума
Сообщений: 753
Пользователь №: 32032
На форуме: 12 лет, 11 месяцев, 16 дней
Карма: 18




Цитата (Snake22 @ 12.04.2013 - 11:09)
перенос вставляется

<br> - есть в исходном тексте
PMПисьмо на e-mail пользователю
    0   Для быстрого поиска похожих сообщений выделите 1-2 слова в тексте и нажмите сюда Для быстрой цитаты из этого сообщения выделите текст и нажмите сюда
Snake22  
 ۩  Дата
Цитировать сообщение

Пользователя сейчас нет на форуме



Новичок
*

Профиль
Группа: Пользователь
Сообщений: 19
Пользователь №: 35265
На форуме: 12 лет, 5 месяцев, 21 день
Карма:




Цитата (OleKh @ 12.04.2013 - 12:13)
<br> - есть  в исходном тексте

но если строка будет такой
$text='http://site1.ru http://site2.ru';
то вместо переноса вставится пробел в ссылку ,то есть
<a href="_http://site2.ru"
результат как то тримнуть надо

Это сообщение отредактировал Snake22 - 12.04.2013 - 13:16
PMПисьмо на e-mail пользователю
    0   Для быстрого поиска похожих сообщений выделите 1-2 слова в тексте и нажмите сюда Для быстрой цитаты из этого сообщения выделите текст и нажмите сюда
OleKh  
Дата
Цитировать сообщение

Пользователя сейчас нет на форуме



Здесь живет
******

Профиль
Группа: Форумчанин
Завсегдатай форума
Сообщений: 753
Пользователь №: 32032
На форуме: 12 лет, 11 месяцев, 16 дней
Карма: 18




Цитата (Snake22 @ 12.04.2013 - 11:15)
вставится пробел в ссылку

Ничего не вставится.

Находится строка соответствующая шаблону, в данном случае http://site1.ru и заменяется на
<a href=\" http://site1.ru\" target=_blank><u>http://site1.ru</u></a>. Остальное остается без изменений.

PMПисьмо на e-mail пользователю
    0   Для быстрого поиска похожих сообщений выделите 1-2 слова в тексте и нажмите сюда Для быстрой цитаты из этого сообщения выделите текст и нажмите сюда
Snake22  
 ۩  Дата
Цитировать сообщение

Пользователя сейчас нет на форуме



Новичок
*

Профиль
Группа: Пользователь
Сообщений: 19
Пользователь №: 35265
На форуме: 12 лет, 5 месяцев, 21 день
Карма:




странно sad.gif у меня пробел вставляется.
код естественно целиком ваш скопировал.
я даже наверное понимаю почему, то есть мы задаём условие искать слово http перед которым стоит пробельный символ, и в итоге это слово берётся вместе с пробельным сиволом.
вот посмотрите скрин, красненьким выделил пробел.
но при этом в первой ссылке пробела нет так как его нет перед словом http, потому что слово идёт первым в тексте.

http://i1.imageban.ru/out/2013/04/12/4e08b...66025b0ab59.jpg

Это сообщение отредактировал Snake22 - 12.04.2013 - 13:28
PMПисьмо на e-mail пользователю
    0   Для быстрого поиска похожих сообщений выделите 1-2 слова в тексте и нажмите сюда Для быстрой цитаты из этого сообщения выделите текст и нажмите сюда
OleKh  
Дата
Цитировать сообщение

Пользователя сейчас нет на форуме



Здесь живет
******

Профиль
Группа: Форумчанин
Завсегдатай форума
Сообщений: 753
Пользователь №: 32032
На форуме: 12 лет, 11 месяцев, 16 дней
Карма: 18




$text = preg_replace('#(^|[^"])((?:www|http)[^\s]+\.\w\w)#i',
"<a href=\"$2\" target=_blank><u>\$2</u></a>",
(
stripslashes($text)));


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

перед которым может быть любой символ кроме ", чтобы исключить href=""
PMПисьмо на e-mail пользователю
    0   Для быстрого поиска похожих сообщений выделите 1-2 слова в тексте и нажмите сюда Для быстрой цитаты из этого сообщения выделите текст и нажмите сюда
Snake22  
 ۩  Дата
Цитировать сообщение

Пользователя сейчас нет на форуме



Новичок
*

Профиль
Группа: Пользователь
Сообщений: 19
Пользователь №: 35265
На форуме: 12 лет, 5 месяцев, 21 день
Карма:




OleKh о,спасибо! теперь кажется норм работает.
правда пробел теперь совсем сжирается но ниче это я и ручками подставить смогу biggrin.gif
PMПисьмо на e-mail пользователю
    0   Для быстрого поиска похожих сообщений выделите 1-2 слова в тексте и нажмите сюда Для быстрой цитаты из этого сообщения выделите текст и нажмите сюда
OleKh  
Дата
Цитировать сообщение

Пользователя сейчас нет на форуме



Здесь живет
******

Профиль
Группа: Форумчанин
Завсегдатай форума
Сообщений: 753
Пользователь №: 32032
На форуме: 12 лет, 11 месяцев, 16 дней
Карма: 18




Пожалуйста.
Цитата (Snake22 @ 12.04.2013 - 12:05)
пробел теперь совсем сжирается

Где? Не понятно.
PMПисьмо на e-mail пользователю
    0   Для быстрого поиска похожих сообщений выделите 1-2 слова в тексте и нажмите сюда Для быстрой цитаты из этого сообщения выделите текст и нажмите сюда
Snake22  
 ۩  Дата
Цитировать сообщение

Пользователя сейчас нет на форуме



Новичок
*

Профиль
Группа: Пользователь
Сообщений: 19
Пользователь №: 35265
На форуме: 12 лет, 5 месяцев, 21 день
Карма:




Цитата (OleKh @ 12.04.2013 - 13:08)

Где? Не понятно.

между двумя ссылками
$text='http://site1.ru http://site2.ru';
ну эт фигня))всё нормально

<a href="http://site1.ru" target=_blank><u>http://site1.ru</u></a>ТУТ_ИСЧЕЗАЕТ_ПРОБЕЛ<a href="http://site2.ru" target=_blank><u>http://site2.ru</u></a><br><br>

Это сообщение отредактировал Snake22 - 12.04.2013 - 14:21
PMПисьмо на e-mail пользователю
    0   Для быстрого поиска похожих сообщений выделите 1-2 слова в тексте и нажмите сюда Для быстрой цитаты из этого сообщения выделите текст и нажмите сюда
OleKh  
Дата
Цитировать сообщение

Пользователя сейчас нет на форуме



Здесь живет
******

Профиль
Группа: Форумчанин
Завсегдатай форума
Сообщений: 753
Пользователь №: 32032
На форуме: 12 лет, 11 месяцев, 16 дней
Карма: 18




Цитата (Snake22 @ 12.04.2013 - 12:20)
между двумя ссылками

<u>\$2</u></a> "

PMПисьмо на e-mail пользователю
    0   Для быстрого поиска похожих сообщений выделите 1-2 слова в тексте и нажмите сюда Для быстрой цитаты из этого сообщения выделите текст и нажмите сюда
  Быстрый ответ
Информация о Госте
Введите Ваше имя
Кнопки кодов
Для вставки цитаты, выделите нужный текст и
НАЖМИТЕ СЮДА
Введите сообщение
Смайлики
:huh:  :o  ;) 
:P  :D  :lol: 
B)  :rolleyes:  <_< 
:)  :angry:  :( 
:unsure:  :blink:  :ph34r: 
     
Показать всё

Опции сообщения  Включить смайлики?
 Включить подпись?
 
1 Пользователей читают эту тему (1 Гостей и 0 Скрытых Пользователей)
0 Пользователей:

Опции темы Ответ в темуСоздание новой темыСоздание опроса