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

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

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

 

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

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

тема: Регулярные выражения и bbCode для добавления ссылок на FTP-сервер
 
 автор: ligdor   (28.02.2011 в 22:06)   письмо автору
 
 

Помогите разобраться с функцией добавления bbkode.
Имеется такой скрипт :

function print_page($postbody) {
       $pattern = "#\[url[\s]*=[\s]*([\S]+)[\s]*\][\s]*([^\[]*)\[/url\]#isU";
       $postbody = preg_replace_callback($pattern,"url_replace_name",$postbody);
       return $postbody;
}

function url_replace_name($matches) {
    if(substr($matches[1], 0, 7) != "http://") $matches[1] = "http://".$matches[1];
    return "<a href='$matches[1]'>$matches[2]</a>";
 }


Проблема вот в чем. При добавлении URL :
[ url =   ftp://mysite.ru ] mysite.ru [ /url ]
, вместо нормальной ссылки - ftp://mysite.ru я перехожу на ftp//mysite.ru. В URL пропущен знак двоеточия. Что не так в переменной $pattern может быть написано ? Или может быть что еще упущено ?

  Ответить  
 
 автор: SHAman   (28.02.2011 в 22:10)   письмо автору
 
   для: ligdor   (28.02.2011 в 22:06)
 

А зачем каждый пробел заключать в []?
\s* это то же самое что [\s]*
По поводу двоеточия - пока загадка для меня.

  Ответить  
 
 автор: cheops   (28.02.2011 в 22:29)   письмо автору
 
   для: ligdor   (28.02.2011 в 22:06)
 

Уберите вот эту строку
 if(substr($matches[1], 0, 7) != "http://") $matches[1] = "http://".$matches[1];

  Ответить  
 
 автор: ligdor   (28.02.2011 в 22:40)   письмо автору
 
   для: cheops   (28.02.2011 в 22:29)
 

Огромное спасибо, строчку удалил и появился знак двоеточия в URL . Получается по умолчанию теперь " http:// " ставиться не будет. Придется дописывать его самостоятельно? Другой вариант существует, с оставшимся по умолчанию " http:// ", если его явно не указывать ?

  Ответить  
 
 автор: cheops   (28.02.2011 в 22:42)   письмо автору
 
   для: ligdor   (28.02.2011 в 22:40)
 

Эту строчку можно включить, исправив условие, скажем поискав в адресе подстроку ://, если она есть - ничего не менять, если отсутствует, добавить http://.

  Ответить  
 
 автор: ligdor   (28.02.2011 в 23:04)   письмо автору
 
   для: cheops   (28.02.2011 в 22:42)
 

Изменил на такой вид :

function url_replace_name($matches) {
    if(substr($matches[1], 0, 7) == "://") 
        return "<a href='$matches[1]'>$matches[2]</a>"; 
    else 
        $matches[1] = "http://".$matches[1]; 
        return "<a href='$matches[1]'>$matches[2]</a>";
 }


Результат такой, как был изначально.

  Ответить  
 
 автор: cheops   (28.02.2011 в 23:23)   письмо автору
 
   для: ligdor   (28.02.2011 в 23:04)
 

Так не пойдет, нужен какой-то такой код
function url_replace_name($matches) { 
    if(strpos($matches[1], "://") === false) $matches[1] = "http://".$matches[1];  
    return "<a href='$matches[1]'>$matches[2]</a>"; 
}

  Ответить  
 
 автор: ligdor   (28.02.2011 в 23:29)   письмо автору
 
   для: cheops   (28.02.2011 в 23:23)
 

Получилось наконец !

Код :

function url_replace_name($matches) {
    if(substr($matches[1], 0, 6) == "ftp://")
        return "<a href='$matches[1]'>$matches[2]</a>"; 
    elseif (substr($matches[1], 0, 7) == "http://")
        return "<a href='$matches[1]'>$matches[2]</a>";
    else $matches[1] = "http://".$matches[1];
        return "<a href='$matches[1]'>$matches[2]</a>";
 }


Спасибо за нужное направление !

  Ответить  
Rambler's Top100
вверх

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