|
|
|
| Т.к. тему в разделе php удалили по всей видимости за спам в пером посте, то логично было бы создать новую тему. Cheops почему бы не заменить теги
[ url ][ /url ] на (см сабж.)? | |
|
|
|
|
|
|
|
для: Евгений Петров
(14.09.2005 в 20:17)
| | Можно, где-то на форуме имеется и моё решение этой проблемы и преобразование обычных ссылок в этот формат. Только необходимо обеспечить обратную совместимость с существующими тэгами. | |
|
|
|
|
|
|
|
для: cheops
(14.09.2005 в 21:13)
| | Я уже сделал совместимость. Только вы пропустили наверное, она у меня на форуме работает и довольно успешно. | |
|
|
|
|
|
|
|
для: Akira
(14.09.2005 в 21:24)
| | Может пропустил :))), а как сделали? | |
|
|
|
|
|
|
|
для: cheops
(14.09.2005 в 21:49)
| | http://www.softtime.ru/forum/read.php?id_forum=2&id_theme=2776&page=2
<?
################## Start SmartUrl
if (preg_match("/\[url\]\s*(\S*)\s*\[\/url\]/i", $postbody )) # [url][/url] Проверяем на правельность заполнения, если не указано имя то используем в его качестве ссылку]
{
if (preg_match("/([ht|f]tp:\/\/)/i", $postbody )) # Есть ли протокол? если нет добавляем http://
{
$postbody=preg_replace("/\[url\]\s*(\S*)\s*\[\/url\]/i",'<a target="_blanc" href="http://\\1">\\1</a>',$postbody); # Вывод ссылки без указания протокола
}
else
{
$postbody=preg_replace("/\[url\]\s*(\S*)\s*\[\/url\]/i",'<a target="_blanc" href="http://\\1">http://\\1</a>',$postbody); # Вывод ссылки с указанием протокола
}
}
else
{
if (preg_match("/\[url=\s*(\S*)\s*\]\s*\[\/url\]/i", $postbody )) # [url=][/url]Проверяем на правельность заполнения, если не указано имя то используем в его качестве ссылку
{
if (preg_match("/([ht|f]tp:\/\/)/i", $postbody ))# Есть ли протокол? если нет добавляем http://
{
$postbody=preg_replace("/\[url=\s*(\S*)\s*\]\s*(\S*)\s*\[\/url\]/i",'<a target="_blanc" href="http://\\1">\\1</a>',$postbody);# Вывод ссылки без указания протокола
}
else
{
$postbody=preg_replace("/\[url=\s*(\S*)\s*\]\s*(\S*)\s*\[\/url\]/i",'<a target="_blanc" href="http://\\1">http://\\1</a>',$postbody); # Вывод ссылки с указанием протокола
}
}
else
{
if (preg_match("/([ht|f]tp:\/\/)/i", $postbody )) # Есть ли протокол? если нет добавляем http://
{
$postbody=preg_replace("/\[url=\s*(\S*)\s*\](.*)\[\/url\]/i",'<a target="_blanc" href="http://\\2">\\2</a>',$postbody);# Вывод ссылки без указания протокола
}
else
{
$postbody=preg_replace("/\[url=\s*(\S*)\s*\]\s*(.*)\s*\[\/url\]/i",'<a target="_blanc" href="http://\\2">\\2</a>',$postbody); # Вывод ссылки с указанием протокола
}
}
}
################## End SmartUrl
?>
|
http://phpcom.ru/forum/read.php?id_forum=1&id_theme=3&id_post=9
Тестирование на моем сайте. | |
|
|
|
|
|
|
|
для: Akira
(14.09.2005 в 21:56)
| | Ничего себе... а если в теме штук 20 ссылок, то такую кучу регулярных выражений нужно будет перепахать... А нельзя как-нибудь уменьшить число вызовов preg_replace при помощи | или ещё как-то? | |
|
|
|
|
|
|
|
для: cheops
(14.09.2005 в 22:07)
| | 20 штук скрипт будет обрабатывать одинаковых тегов.
Т.е. новый и старый стиль нельзя в одном месте использовать. И потом я не спец по рег. выражениям. | |
|
|
|
|
|
|
|
для: Akira
(14.09.2005 в 22:11)
| | Да кстате, вы не заметили условия? Там всего один preg_replace работает. | |
|
|
|
|
|
|
|
для: Akira
(14.09.2005 в 22:18)
| | А если так попробовать:
<?
$postbody = "Перейди по [url=\"http://chat.ru/liteforum/forum/addthemeform.php?id_forum=1\"]этой[/url] ссылке или сюда: [ url]http://chat.ru/liteforum/forum/addthemeform.php?id_forum=1[/url]";
// не забудьте пробел убрать между "[" и "url" когда будете тестировать :)
$pattern = array
(
"/\[url[\s]*=[\s]*[\'\"]?(http:\/\/)?(www\.)?([-0-9a-z_\.]+\.[0-9a-z]{2,3})\/?([^\'\"]*)\/?[\'\"]\](.*)\[\/url\]{1}/iU",
"/\[url\]\s*(\S*)\s*\[\/url\]/si"
);
$relpacement = array
(
"<a href=\"http://$\{2}$\{3}/$\{4}\" target=_blank>$\{5}</a>",
"<a href=\"\${1}\" target=_blank>\${1}</a>"
);
echo preg_replace($pattern,$relpacement,$postbody);
?>
|
| |
|
|
|
|
|
|
|
для: Евгений Петров
(14.09.2005 в 23:28)
| | Опять не фига не получаеться по вашему коду. Запускал в зенде. | |
|
|
|
|
|
|
|
для: Akira
(15.09.2005 в 00:00)
| | В каком смысле не получается? | |
|
|
|
|
|
|
|
для: Евгений Петров
(15.09.2005 в 00:21)
| | в прямом не обрабатывает :) Счас уже поздно, может завтра точнее посмотрю и скажу. | |
|
|
|
|
|
|
|
для: Akira
(15.09.2005 в 00:31)
| | OK, а ты пробел убрал в [url] я его специально поставил чтоб он не обрабатывался? | |
|
|
|
|
|
|
|
для: Евгений Петров
(15.09.2005 в 00:37)
| | ах-ха точно вот оно что :) Это безусловно лучше чем мой вариант :) | |
|
|
|
|
|
|
|
для: Akira
(15.09.2005 в 00:53)
| | Ну так как? Будет у нас новый супер-тег? :))) | |
|
|
|
|
|
|
|
для: Евгений Петров
(15.09.2005 в 23:32)
| | я как стАрожил говорю.
Нет. | |
|
|
|
|
|
|
|
для: Akira
(16.09.2005 в 00:14)
| | [вздыхаю] :) | |
|
|
|