Модераторы: Aliance, skyboy, MoLeX, ksnk

Поиск:

Ответ в темуСоздание новой темы Создание опроса
> URL, и снова он 
:(
    Опции темы
PARROT
Дата 9.2.2006, 14:17 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
****


Профиль
Группа: Экс. модератор
Сообщений: 2339
Регистрация: 5.1.2005
Где: Спб-ЦарьГрад

Репутация: нет
Всего: 50



Задача:
В форуме могут встречаться 2 типа адресов:
Код

http://www.parot.spb.ru

и второй:
Код

<a href=www.parot.spb.ru>Птица</a>

Адрес первого типа вводится просто от руки и он должен подсвечиваться, для этого я использую класс:
Код

 function AssemblyUrls($text) {
$text        = preg_replace("%((?:http|ftp)://[-\w]+(?:\.[-\w]+)+\b[-\w:@&?=+,!/;\~*$\.\'\%]*)(?<![\.,?!)])%is", "<a target=\"_blank\" href=\"\\1\">\\1</a>", $text);
                $text        = preg_replace("%\[url\](.*)\\[\/url\]%is", "<a target=\"_blank\" href=\"\\1\">\\1</a>", $text);
                return preg_replace("%\[url=([^\]]*)\](.*)\[\/url\]%is", "<a target=\"_blank\" href=\"\\1\">\\2</a>", $text);

        }

Адрес второго вида вводится в текстареа методом яваскрипт сценария, что в итоге представляет вот это:
Код

[url=http://parot.spb.ru]Птица[/url]

Естественно при выводе из базы это должно переконвертироваться в:
Код

<a href=http://parot.spb.ru>Птица</a>

Для этого я использую вот это:
Код

$mas_com[4]=preg_replace("/\[url=([^\]]*)\](.*)\[\/url\]/", "<a href=\"\\1\">\\2</a>", $mas_com[4]); 

А так как это все записывается в одно поле базы, получается конфликт при выводе из базы, работает или одно или другое.
Вопрос, как объединить, чтобы работало и то и другое? Эх! smile

Это сообщение отредактировал(а) PARROT - 9.2.2006, 14:18


--------------------
Безумный утешается прошедшим, слабоумный - будущим, умный - настоящим!
PM MAIL   Вверх
Mal Hack
Дата 9.2.2006, 15:32 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Мудрый...
****


Профиль
Группа: Участник Клуба
Сообщений: 9926
Регистрация: 15.2.2004

Репутация: 16
Всего: 261



Сделай так.
Сначала заменги все простые ссылки на их ....
А затем пройдись по всему тексту регуляркой по [url]...

Либо, надо делать более сложное условие в регулярке.

PM ICQ   Вверх
PARROT
Дата 9.2.2006, 15:36 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
****


Профиль
Группа: Экс. модератор
Сообщений: 2339
Регистрация: 5.1.2005
Где: Спб-ЦарьГрад

Репутация: нет
Всего: 50



А можно попросить пример? Пожалуйста!


--------------------
Безумный утешается прошедшим, слабоумный - будущим, умный - настоящим!
PM MAIL   Вверх
Mal Hack
Дата 9.2.2006, 15:39 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Мудрый...
****


Профиль
Группа: Участник Клуба
Сообщений: 9926
Регистрация: 15.2.2004

Репутация: 16
Всего: 261



Это:
Код
$text        = preg_replace("%((?:http|ftp)://[-\w]+(?:\.[-\w]+)+\b[-\w:@&?=+,!/;\~*$\.\'\%]*)(?<![\.,?!)])%is", "<a target=\"_blank\" href=\"\\1\">\\1</a>", $text);

Заменяем на:
Код
$text        = preg_replace("%((?:http|ftp)://[-\w]+(?:\.[-\w]+)+\b[-\w:@&?=+,!/;\~*$\.\'\%]*)(?<![\.,?!)])%is", "[url=\\1\]\\1[/url]", $text);

PM ICQ   Вверх
PARROT
Дата 9.2.2006, 15:50 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
****


Профиль
Группа: Экс. модератор
Сообщений: 2339
Регистрация: 5.1.2005
Где: Спб-ЦарьГрад

Репутация: нет
Всего: 50



ближе, но не совсем, вот что оно выдает теперь:
Код

http://avto.spb.ru[/url]]авто



--------------------
Безумный утешается прошедшим, слабоумный - будущим, умный - настоящим!
PM MAIL   Вверх
Mal Hack
Дата 9.2.2006, 15:58 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Мудрый...
****


Профиль
Группа: Участник Клуба
Сообщений: 9926
Регистрация: 15.2.2004

Репутация: 16
Всего: 261



Вот так попробуй.
Код
 function AssemblyUrls($text) {
$text        = preg_replace("%((?:http|ftp)://[-\w]+(?:\.[-\w]+)+\b[-\w:@&?=+,!/;\~*$\.\'\%]*)(?<![\.,?!)])%is", "[url=\\1\]\\1[/url]", $text);                $text        = preg_replace("%\[url\](.*)\\[\/url\]%is", "<a target=\"_blank\" href=\"\\1\">\\1</a>", $text);
               return $text;
        }

PM ICQ   Вверх
PARROT
Дата 9.2.2006, 17:43 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
****


Профиль
Группа: Экс. модератор
Сообщений: 2339
Регистрация: 5.1.2005
Где: Спб-ЦарьГрад

Репутация: нет
Всего: 50



вот что выдает:
Код

[url=[url=http://avto.spb.ru]http://avto.spb.ru[/url]]авто[/url]



--------------------
Безумный утешается прошедшим, слабоумный - будущим, умный - настоящим!
PM MAIL   Вверх
Mal Hack
Дата 9.2.2006, 18:37 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Мудрый...
****


Профиль
Группа: Участник Клуба
Сообщений: 9926
Регистрация: 15.2.2004

Репутация: 16
Всего: 261



preg_replace("%((?:http
замени на
preg_replace("%[^=\]\[]((?:http|
PM ICQ   Вверх
PARROT
Дата 9.2.2006, 21:56 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
****


Профиль
Группа: Экс. модератор
Сообщений: 2339
Регистрация: 5.1.2005
Где: Спб-ЦарьГрад

Репутация: нет
Всего: 50



Теперь просто ссылка не подсвечивается, а ссылка созданная яваскрипт выглядит вот так:
Код

[url=http://avto.spb.ru]авто[/url]//из базы



--------------------
Безумный утешается прошедшим, слабоумный - будущим, умный - настоящим!
PM MAIL   Вверх
PARROT
Дата 9.2.2006, 22:20 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
****


Профиль
Группа: Экс. модератор
Сообщений: 2339
Регистрация: 5.1.2005
Где: Спб-ЦарьГрад

Репутация: нет
Всего: 50



посмотреть можно тут http://pk.traktora.spb.ru/index.php?page=comment&amp;idp=65


--------------------
Безумный утешается прошедшим, слабоумный - будущим, умный - настоящим!
PM MAIL   Вверх
Mal Hack
Дата 9.2.2006, 22:48 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Мудрый...
****


Профиль
Группа: Участник Клуба
Сообщений: 9926
Регистрация: 15.2.2004

Репутация: 16
Всего: 261



Тут есть два варианта. Либо через callback функцию, либо мы указываем символы, после которых может идти простая ссылка.

Код
<?php

 function AssemblyUrls($text) {
 $text        = preg_replace("%(?:^|[A-Z0-9])((?:http|ftp)://[-\w]+(?:\.[-\w]+)+\b[-\w:@&?=+,!/;\~*$\.\'\%]*)(?<![\.,?!)])%is", "[url]\\1[/url]", $text);               
 $text        = preg_replace("%\[url\](.+?)\\[\/url\]%is", "<a target=\"_blank\" href=\"\\1\">\\1</a>", $text);
               return $text;
        }

 $str = <<<EOF
http://ya.ru
<br>
[url]http://ya.ru[/url]
<br>
[url]sdfsdfsdfsdf[/url]

EOF;

 print AssemblyUrls($str);

?>

PM ICQ   Вверх
PARROT
Дата 10.2.2006, 09:49 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
****


Профиль
Группа: Экс. модератор
Сообщений: 2339
Регистрация: 5.1.2005
Где: Спб-ЦарьГрад

Репутация: нет
Всего: 50



Mal Hack, спасибо! Все работает! И такая и такая ссылка. СПАСИБО! smile


--------------------
Безумный утешается прошедшим, слабоумный - будущим, умный - настоящим!
PM MAIL   Вверх
PARROT
Дата 25.2.2006, 23:03 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
****


Профиль
Группа: Экс. модератор
Сообщений: 2339
Регистрация: 5.1.2005
Где: Спб-ЦарьГрад

Репутация: нет
Всего: 50



История с продолжением, только теперь email:
2 дня пыталась сделать по аналогии URL, ничего не получилось.
Код

<?php

  function Assemblyemail($text) {
 $text        = preg_replace("%(?:^|[A-Z0-9])((\w|\d){1}(\w|\d|\-|_|\.|\+)+?(\w|\d){1}@((\w|\d){1,}(\-|\.){0,1}(\w|\d){1,})+?\.(\w){2,4})%is", "[email]\\1[/email]", $text);
 $text        = preg_replace("%\[email\](.+?)\\[\/email\]%is", "<a target=\"_blank\" href=mailto:\\1>\\1</a>", $text);
               return $text;
        }

 $str = <<<EOF
[email protected]
<br>
[email][email protected][/email]
<br>
[[email protected]]PARROT[/email]
<br>
[email]PARROT[/email]

EOF;

 print Assemblyemail($str);

?>

Посмотреть вид можно тут: http://pk.traktora.spb.ru/index.php?page=comment&idp=75


--------------------
Безумный утешается прошедшим, слабоумный - будущим, умный - настоящим!
PM MAIL   Вверх
PARROT
Дата 26.2.2006, 13:09 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
****


Профиль
Группа: Экс. модератор
Сообщений: 2339
Регистрация: 5.1.2005
Где: Спб-ЦарьГрад

Репутация: нет
Всего: 50



Ну вот. Опять двадцать пять. Работает или просто ссылка, или ссылка с описанием.
Добавлено @ 13:12
Если отключить класс, то работает ссылка с описанием.
на этот рег:
Код

$mas_com[4]=preg_replace("/\[email=([^\]]*)\](.*)\[\/email\]/", "<a href=mailto:\\1>\\2</a>", $mas_com[4]); 

Просто ссылка даже не подсвечивается.
Если отключить этот рег, и включить класс, ссылка подсвечивается, а ссылка с описанием подсвечивается как ей хочется, обрезая 1 цифру адреса......... smile


--------------------
Безумный утешается прошедшим, слабоумный - будущим, умный - настоящим!
PM MAIL   Вверх
-=Ustas=-
Дата 26.2.2006, 14:31 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Ustix IT Group
****


Профиль
Группа: Участник Клуба
Сообщений: 2222
Регистрация: 21.1.2005
Где: Краснодар

Репутация: 6
Всего: 69



PARROT, решить вроде удалось, но есть одно малюсенькое но...
Код

<?php

function AssemblyEmail($text)
{
    $text = preg_replace("#(^[^\[]|\s)((\w|\d){1}(\w|\d|\-|_|\.|\+)+?(\w|\d){1}@((\w|\d){1,}(\-|\.){0,1}(\w|\d){1,})+?\.(\w){2,4})#is", "[email]\\2[/email]", $text);

    $text = preg_replace("#\[email\](.*)\[\/email\]#isU", "<a target=\"_blank\" href=mailto:\\1>\\1</a>", $text);
    $text = preg_replace("#\[email=(.*)\](.*)\[\/email\]#isU", "<a target=\"_blank\" href=mailto:\\1>\\2</a>", $text);

    return $text;
}

$string = " [email protected] <br>dfjvbh df bdsjvhbzxjhc vb <br> [email][email protected][/email]<br> dfkjn fv <br>[[email protected]]PARROT[/email]<br>dfjkvn kjd vn dfjk vnkdjs vnkdsjf vndsv<br> [email]PARROT[/email]";

echo $string;
echo "<hr>";

$string = AssemblyEmail($string);

echo $string;

?>

Это малюсенькое но заключается в том, что если мыло стоит в начале предложения, и перед ним нет пробела или какого-нить занка, то первый символ обрезается smile Пока не могу понять в чем дело, а в общем - нормально smile


--------------------
В искаженном мире все догмы одинаково произвольны, включая догму о произвольности догм.
-----
PM WWW ICQ Skype   Вверх
Страницы: (3) Все [1] 2 3 
Ответ в темуСоздание новой темы Создание опроса
1 Пользователей читают эту тему (1 Гостей и 0 Скрытых Пользователей)
0 Пользователей:
« Предыдущая тема | PHP: Тексты | Следующая тема »


 




[ Время генерации скрипта: 0.0928 ]   [ Использовано запросов: 21 ]   [ GZIP включён ]


Реклама на сайте     Информационное спонсорство

 
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности     Powered by Invision Power Board(R) 1.3 © 2003  IPS, Inc.