Модераторы: 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   Вверх
PARROT
Дата 26.2.2006, 14:46 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
****


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

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



Это "Но" уже не такое страшное, Спасибо. Полегчало. Работает, да первую цифру душит, интересно знать почему оно так себя ведет smile


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


Эксперт
****


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

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



Товарищи, это похоже на Птичий грипп, сначала email отказывался показываться нормально с первой строки, но теперь и URL ведет себя также. Диагноз один. Как справиться с общей проблемой? smile


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


Ustix IT Group
****


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

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



Т.е. обрезает самую первый символ, стоящий в самом начале строки?


--------------------
В искаженном мире все догмы одинаково произвольны, включая догму о произвольности догм.
-----
PM WWW ICQ Skype   Вверх
PARROT
Дата 26.2.2006, 18:06 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
****


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

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



Не совсем, URL с первой строки ведет себя вот так:
Код

http://www.vingrad.ru[/url]"[url=http://www.vingrad.ru]http://www.vingrad.ru

тут можно посмотреть и даже попробовать: http://pk.traktora.spb.ru/index.php?page=c...amp;#038;idp=65
Добавлено @ 18:10
А при наведении на ссылку, посылает вот сюда и так:
Код

http://pk.traktora.spb.ru/<a

Добавлено @ 18:15
вася
Такое впечатление, что ему не нравятся именно ссылки введенные от руки, вроде ссылки с описанием хоть с первой, хоть с последней строки пишутся нормально. Да именно так! Ссылки с описанием ему по зубам, а вот просто ссылки не нравятся, так же как и просто введенный от руки e-mail с первой строки. Может с функцией callback чего не так?
Добавлено @ 18:20
Выкладываю полностью свой класс, может быть так понятнее будет:
Вот класс:
Код

<?
class HtmlCodes {
 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;
        }
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;
}


        function ApplyFormatting($text, $nl2br = true) {

                return str_replace(
                        array('[i]', '[/i]', '[b]', '[/b]', '[u]', '[/u]', '[quote]','[/quote]','[color=red]','[/color]','[color=blue]','[/color]','[size=1]','[/size]','[size=2]','[/size]','[size=6]','[/size]','[size=8]','[/size]','[size=10]','[/size]','[font=arial]','[/font]','[font=courier]','[/font]','[font=impact]','[/font]','[font=tahoma]','[/font]','[font=times]','[/font]','[font=verdana]','[/font]','[justify]', '[/justify]',
                                '[center]',  '[/center]','[right]', '[/right]', '[left]', '[left]',),
                        array('<i>', '</i>', '<b>', '</b>', '<u>', '</u>','<div class=quote>','</div>','<font color=red>','</font>','<font color=blue>','</font>','<font size=1>','</font>','<font size=2>','</font>','<font size=6>','</font>','<font size=8>','</font>','<font size=10>','</font>','<font face=arial>','</font>','<font face=courier>','</font>','<font face=impact>','</font>','<font face=tahoma>','</font>','<font face=times>','</font>','<font face=verdana>','</font>','<p align="justify" class="content">', '</p>',
                                 '<p align="center" class="content">', '</p>', '<p align="right" class="content">', '</p>',
                                 '<p align="left" class="content">', '</p>',), (($nl2br == true) ? nl2br($text) : $text)
                );

        }

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

}
?>

Вот кусок вывода из базы:
Код

       $mas_com[4] = HtmlCodes::AssemblyUrls($mas_com[4]);
       $mas_com[4] = HtmlCodes::Assemblyimg($mas_com[4]);
       $mas_com[4] = HtmlCodes::Assemblyemail($mas_com[4]);
       $mas_com[4] = HtmlCodes::ApplyFormatting($mas_com[4]);
       $mas_com[4]=preg_replace("/\[url=([^\]]*)\](.*)\[\/url\]/", "<a href=\"\\1\">\\2</a>", $mas_com[4]);
       $mas_com[4]=preg_replace("/\[pict=([^\]]*)\](.*)\[\/pict\]/", "<a href=\"\\1\">\\2</a>", $mas_com[4]);



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


Ustix IT Group
****


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

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



PARROT, покажи код.
Добавлено @ 18:30
Не вижу проблем:
Код

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);
    $text = preg_replace("#\[url=(.*)\](.*)\[\/url\]#isU", "<a target=\"_blank\" href=\"\\1\">\\2</a>", $text);

    return $text;
}

Мож я что-то не так тебя понял?


--------------------
В искаженном мире все догмы одинаково произвольны, включая догму о произвольности догм.
-----
PM WWW ICQ Skype   Вверх
PARROT
Дата 26.2.2006, 19:54 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
****


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

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



При таком URL-классе, если пользоваться только классом, то ссылка по наведению выглядит в строке так:
Код

http://pkspo/[url=http://avto.spb.ru]http://avto.spb.ru[/url]"

А если после класса воспользоваться этим регом:
Код

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

То при наведению на ссылку выглядит так:
Код

http://pkspo/<a




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


Ustix IT Group
****


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

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



PARROT, я тебя что-то опять не понимаю. Зачем тебе там несколько раз какими-то классами прогонять, выше функция нормально все заменяет в подобном тексте:
Код

$string = "http://vingrad.ru <br>dfjvbh df bdsjvhbzxjhc vb <br> [url]http://vingrad.ru[/url]<br> dfkjn fv <br>[url=http://vingrad.ru]PARROT[/url]<br>dfjkvn kjd vn dfjk vnkdjs vnkdsjf vndsv<br> [email]PARROT[/email]";



--------------------
В искаженном мире все догмы одинаково произвольны, включая догму о произвольности догм.
-----
PM WWW ICQ Skype   Вверх
PARROT
Дата 26.2.2006, 20:18 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
****


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

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



Если использовать этот класс (твой), то получается вот так:
http://pk.traktora.spb.ru/index.php?page=comment&idp=87

Че-то я не понимаю, а тут работает: http://pk.traktora.spb.ru/url.php

Может отдохнуть надо, или я уже чего не понимаю. smile

Это сообщение отредактировал(а) PARROT - 26.2.2006, 20:28


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


Ustix IT Group
****


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

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



Цитата(PARROT @ 26.2.2006, 20:18 Найти цитируемый пост)
Если использовать этот класс (твой), то получается вот так:

smile Не может быть! У меня работает на ура... smile


--------------------
В искаженном мире все догмы одинаково произвольны, включая догму о произвольности догм.
-----
PM WWW ICQ Skype   Вверх
PARROT
Дата 27.2.2006, 10:26 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
****


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

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



Щас буду искать ошибку методом исключения, что кому мешает, иначе уже никак. А с email ничего не сделать, то что он первую цифру глотает?


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


Эксперт
****


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

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



Да, действительно, все работает.
Нашла я конфликт:
Вот эта функция для фоток, конфликтует с функцией URL.
Код

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

Как быть? Соединить нельзя?




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


Ustix IT Group
****


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

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



PARROT, подожди, я нашел глюк, та функция заменяет ссылки вида http://.... только в начале строки... smile
Добавлено @ 11:25
Вот исправленный вариант той функции:
Находит сначала ссылки вида www.kjbfkjb........ , заменяет их на вид http://www.sdfv....... , затем ссылки вида http://..... заменяет на [url] и потом все по распорядку как и раньше:
Код

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

    return $string;
}

Добавлено @ 11:28
Хотя, тот глюк, который имел место при email, точно также распространился и на урлы, т.е. если это начало строки, и в начале строки сразу же без пробела идет адрес, то его не хочет находить. Надо еще поизвращаться... smile


--------------------
В искаженном мире все догмы одинаково произвольны, включая догму о произвольности догм.
-----
PM WWW ICQ Skype   Вверх
PARROT
Дата 27.2.2006, 11:37 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
****


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

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



http://pk.traktora.spb.ru/url.php 1 функция
http://pk.traktora.spb.ru/url1.php 2 исправленная


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


Ustix IT Group
****


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

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



PARROT, ну так и...? Что-то не так?


--------------------
В искаженном мире все догмы одинаково произвольны, включая догму о произвольности догм.
-----
PM WWW ICQ Skype   Вверх
PARROT
Дата 27.2.2006, 13:21 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
****


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

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



Я немножко не понимаю, одна функция должна делать все эти действия или эта функция только для URL?
Добавлено @ 13:30
Просто email и URL написанные от руки эта функция не подсвечивает. Я сейчас объединила в одну и картинки здесь же, все работает, но не подсвечиваются простые ссылки написанные от руки. А так клево, все работает от одной функции, а не от 3 разных. smile
Код

<?
 function AssemblyUrls($text)
{
    $text = preg_replace("#(^[^\[]|\s)((www)\.[-\w]+(?:\.[-\w]+)+\b[-\w:@&?=+,!/;\~*$\.\'\%]*)(?<![\.,?!)])#is", " http://\\2", $text);
    $text = preg_replace("#(^[^\[]|\s)((http|ftp)://[-\w]+(?:\.[-\w]+)+\b[-\w:@&?=+,!/;\~*$\.\'\%]*)(?<![\.,?!)])#is", " [url]\\2[/url]", $text);
    $text = preg_replace("#\[url\](.*)\\[\/url\]#isU", "<a target=\"_blank\" href=\"\\1\">\\1</a>", $text);
    $text = preg_replace("#\[url=(.*)\](.*)\[\/url\]#isU", "<a target=\"_blank\" href=\"\\1\">\\2</a>", $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);
    $text = preg_replace("%\[pict\](.*)\\[\/pict\]%is", "<a target=\"_blank\" href=\"\\1\"><img src=\\1 border=0></a>", $text);
    return $text;
}

$string = "http://vingrad.ru <br>dfjvbh df bdsjvhbzxjhc vb <br> [url]http://vingrad.ru[/url]<br> dfkjn fv <br>[url=http://vingrad.ru]PARROT[/url]<br>dfjkvn kjd vn dfjk vnkdjs vnkdsjf vndsv<br> [email]PARROT[/email]<br>[[email protected]]Íàòàëèÿ[/email]<br>[email protected]<br>[pict]http://web/drug.jpg[/pict]";
$string = AssemblyUrls($string);
echo $string;
?>


Это сообщение отредактировал(а) PARROT - 27.2.2006, 13:38


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


Ustix IT Group
****


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

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



Вот эта функция:
Код

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

    return $string;
}

только для урл


--------------------
В искаженном мире все догмы одинаково произвольны, включая догму о произвольности догм.
-----
PM WWW ICQ Skype   Вверх
PARROT
Дата 27.2.2006, 14:14 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
****


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

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



Такс........ все заработало http://pk.traktora.spb.ru/url2.php
Но вот если мыло от руки первой строкой, то режет 1 знак.
УРА! Осталось чуть-чуть! Мы у цели! (Как мало нужно человеку для счастья?)
Вопрос: Как обмануть, последний глюк?
Код

<?
function ReplaceUrl($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);
    $text = preg_replace("#\[url=(.*)\](.*)\[\/url\]#isU", "<a target=\"_blank\" href=\"\\1\">\\2</a>", $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);
    $text = preg_replace("%\[pict\](.*)\\[\/pict\]%is", "<a target=\"_blank\" href=\"\\1\"><img src=\\1 border=0></a>", $text);
    return $text;
}
$string = "http://vingrad.ru <br>dfjvbh df bdsjvhbzxjhc vb <br> [url]http://vingrad.ru[/url]<br> dfkjn fv <br>[url=http://vingrad.ru]PARROT[/url]<br>dfjkvn kjd vn dfjk vnkdjs vnkdsjf vndsv<br> [email]PARROT[/email]<br>[[email protected]]Íàòàëèÿ[/email]<br> [email protected] <br>[pict]http://web/drug.jpg[/pict]";
$string = ReplaceUrl($string);
echo $string;
?>



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


Ustix IT Group
****


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

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



PARROT, smile поставь в реге мыла нулевой кармашек... т.е.:
Код

$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]\\0[/email]", $text);

Добавлено @ 14:50
Ты убрала мой рег на урл, а твой рег находит урл только в начале строки smile


--------------------
В искаженном мире все догмы одинаково произвольны, включая догму о произвольности догм.
-----
PM WWW ICQ Skype   Вверх
PARROT
Дата 27.2.2006, 14:51 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
****


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

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



-=Ustas=-, а что это такое? Что это было? Все работает! Ура!
Добавлено @ 14:58
Я объясню почему я его убрала, потому что этот рег не подсвечивал простую ссылку URLa, введенную вручную. Незнаю что ему не хватало...


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


Ustix IT Group
****


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

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



Цитата(PARROT @ 27.2.2006, 14:51 Найти цитируемый пост)
а что это такое? Что это было?

Обрезанное совпадение подставляли. ))
Цитата(PARROT @ 27.2.2006, 14:51 Найти цитируемый пост)
Я объясню почему я его убрала, потому что этот рег не подсвечивал простую ссылку URLa, введенную вручную. Незнаю что ему не хватало...

Как это не подсвечивал, у меня работает на отлично.




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


 




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


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

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