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

Поиск:

Ответ в темуСоздание новой темы Создание опроса
> как работает [конкретный] код на preg_replace? [Помогите разобраться с одной функцией] 
:(
    Опции темы
SIVka1
Дата 2.3.2008, 16:04 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



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

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



Я достал из одного кода функцию по преобразованию из обычного текста в ссылку:
Код

function convertLinks($content)    {
$content = preg_replace('/(http|ftp|news|https)(:\/\/)([^<> ])+/ie', "cropLink('\\0')", $content);
$content = preg_replace('/([\w-?&;#~=\.\/]+\@(\[?)[a-zA-Z0-9\-\.]+\.([a-zA-Z]{2,4}|[0-9]{1,3})(\]?))/ie', "cropMail('\\1')", $content);
return $content;
}

function cropLink($content, $len = "50") {
    if (strlen($content) > $len) {
        $len = ceil($len/2) - 2;
        return "<a target=_blank href=\"".$content."\">".substr($content, 0, $len)."...".substr($content, -$len)."</a>";
    }
    return "<a target=_blank href=\"".$content."\">".$content."</a>";
}

function cropMail($content, $len = "50") {
    if (strlen($content) > $len) {
        $len = ceil($len/2) - 2;
        return "<a href=\"mailto:".$content."\">".substr($content, 0, $len)."...".substr($content, -$len)."</a>";
    }
    return "<a href=\"mailto:".$content."\">".$content."</a>";
} 


Как работают функции cropMail() и cropLink() я понял, а вот с convertLinks() я так и не разобрался.
Народ, можете объяснить как работают строки:
Код

$content = preg_replace('/(http|ftp|news|https)(:\/\/)([^<> ])+/ie', "cropLink('\\0')", $content);
$content = preg_replace('/([\w-?&;#~=\.\/]+\@(\[?)[a-zA-Z0-9\-\.]+\.([a-zA-Z]{2,4}|[0-9]{1,3})(\]?))/ie', 

PM MAIL   Вверх
griker
Дата 2.3.2008, 16:42 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


MDMA
**


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

Репутация: 2
Всего: 8





--------------------
I don't respect police
PM MAIL   Вверх
flashaa
Дата 2.3.2008, 17:20 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


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

Репутация: 19
Всего: 25



SIVka1, по поводу получения ссылок я уже писал пост и приводил наиболее полноценное решение от Дмитрия Котерова, автора "PHP5 в  подлиннике".

 http://forum.vingrad.ru/index.php?showtopi...t&p=1407000

По поводу того, как работае convertLinks():
Цитата

$content = preg_replace('/(http|ftp|news|https)(:\/\/)([^<> ])+/ie', "cropLink('\\0')", $content);

Первая и обязательная часть текста ссылки - протокол. Любой из http, ftp и тд.
Следующая обязательная часть - двоеточие и 2 слеша.
Далее идет любая строка, не включающая в себя угловые скобки
Модификатор e обозначает, выполнить результат подстановки pre_replace как PHP код и заменить часть строки, выделенную регулярным выражением,  на результат выполнения этого PHP-кода.
Значит, после срабатывания preg_replace, выполняется функция cropLink, в качестве первого параметра которой передается текст ссылки типа http://somelink.
Смотрим код функции.
Цитата

function cropLink($content, $len = "50") {
    if (strlen($content) > $len) {
        $len = ceil($len/2) - 2;
        return "<a target=_blank href=\"".$content."\">".substr($content, 0, $len)."...".substr($content, -$len)."</a>";
    }
    return "<a target=_blank href=\"".$content."\">".$content."</a>";
}

Формируется html-код ссылки.
Если длина текста ссылки больше 50 символов, текст ссылки обрезается так, что остаются только начало и конец. Некоторая средняя часть пропускается и вместо нее добавляется троеточие.
В ином случае (если длина  меньше либо равна 50), текст ссылки возвращается как есть.
Результат работы этой функции и становится заменяющей строкой.

С емейлом суть аналогична.

Это сообщение отредактировал(а) flashaa - 2.3.2008, 17:21
PM MAIL   Вверх
  
Ответ в темуСоздание новой темы Создание опроса
Правила форума "PHP"
Aliance
IZ@TOP
skyboy
SamDark
MoLeX

Новичкам:

  • PHP редакторы собираются и обсуждаются здесь
  • Электронные книги по PHP, документацию можно найти здесь
  • Интерпретатор PHP, полную документацию можно скачать на PHP.NET

Важно:

  • Не брезгуйте пользоваться тегами [code=php]КОД[/code] для повышения читабельности текста/кода.
  • Перед созданием новой темы воспользуйтесь поиском и загляните в FAQ
  • Действия модераторов можно обсудить здесь

Внимание:

  • Темы "ищу скрипт", "подскажите скрипт" и т.п. будут переноситься в форум "Web-технологии"
  • Темы с именами: "Срочно", "помогите", "не знаю как делать" будут УДАЛЯТЬСЯ

Если Вам понравилась атмосфера форума, заходите к нам чаще! С уважением, IZ@TOP, skyboy, SamDark, MoLeX, awers.

 
0 Пользователей читают эту тему (0 Гостей и 0 Скрытых Пользователей)
0 Пользователей:
« Предыдущая тема | PHP: Общие вопросы | Следующая тема »


 




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


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

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