|
|
|
| Помогите разобраться с функцией добавления 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 может быть написано ? Или может быть что еще упущено ? | |
|
|
|
|
|
|
|
для: ligdor
(28.02.2011 в 22:06)
| | А зачем каждый пробел заключать в []?
\s* это то же самое что [\s]*
По поводу двоеточия - пока загадка для меня. | |
|
|
|
|
|
|
|
для: ligdor
(28.02.2011 в 22:06)
| | Уберите вот эту строку
if(substr($matches[1], 0, 7) != "http://") $matches[1] = "http://".$matches[1];
|
| |
|
|
|
|
|
|
|
для: cheops
(28.02.2011 в 22:29)
| | Огромное спасибо, строчку удалил и появился знак двоеточия в URL . Получается по умолчанию теперь " http:// " ставиться не будет. Придется дописывать его самостоятельно? Другой вариант существует, с оставшимся по умолчанию " http:// ", если его явно не указывать ? | |
|
|
|
|
|
|
|
для: ligdor
(28.02.2011 в 22:40)
| | Эту строчку можно включить, исправив условие, скажем поискав в адресе подстроку ://, если она есть - ничего не менять, если отсутствует, добавить http://. | |
|
|
|
|
|
|
|
для: 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>";
}
|
Результат такой, как был изначально. | |
|
|
|
|
|
|
|
для: 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>";
}
|
| |
|
|
|
|
|
|
|
для: 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>";
}
|
Спасибо за нужное направление ! | |
|
|
|