Vlad Drakula |
14-01-2004 20:02 214988 |
Prisoner
Код:
<?php
// коды для вставки картинок
$Codes["img"] = array(
// esc [[img]], [[/img]], [[img=*]] => [img], [/img], [img=*]
"#\[\[(/?)img\]\]#is" => "&#91;$1img&#93;",
"#\[\[img=(\S+?)\]\]#is" =>"&#91;img=$2&#93;",
// Безопасность: убираем потенциальные ссылки на скрипты (\s* - защита от IE)
"#\[img=.*?s\s*c\s*r\s*i\s*p\s*t\s*:.*?\]#is" =>
"&#91;img=<font class=\"warning\">&laquo;предупреждение: скрипты в постах запрещены&raquo;</font>&#93;",
"#\[img\].*?s\s*c\s*r\s*i\s*p\s*t\s*:.*?\[/img\]#is" =>
"&#91;img&#93;<font class=\"warning\">&laquo;предупреждение: скрипты в постах запрещены&raquo;</font>&#91;/img&#93;",
// Безопасность: убираем картинки, ссылающиеся на e-mail (назойливая штука)
"#\[img=[^]]*?mailto:[^]]*?\]#is" =>
"&#91;img=<font class=\"warning\">&laquo;предупреждение !&raquo;</font>&#93;",
"#\[img\][^]]*?mailto:[^]]*?\[/img\]#is" =>
"&#91;img&#93;<font class=\"warning\">&laquo;предупреждение !&raquo;</font>&#91;/img&#93;",
"#\[img=(\S+?)\]\s*(?!.*?\[(?:img).*?)(.+?)\s*\[/img\]#is" =>
"<img src=\"$1\" alt=\"$2\" title=\"$2\" />",
"#\[img]\s*(?!.*?\[(?:img).*?)(.+?)\s*\[/img\]#is" =>
"<img src=\"$1\" alt=\"$1\" title=\"\" />",
"#\[img=(\S+?)\]#is" =>
"<img src=\"$1\" alt=\"$1\" />",
);
// простые коды
$Codes["easy"] = array(
// esc кодов с непосредственным html-эквивалентом
"#\[\[(/?)(b|i|u|s|strike|small|center|pre|tt|sub|sup)\]\]#is" => "&#91;$1$2&#93;",
"#\[\[(br|hr)\]\]\n?#i" => "&#91$1&#93",
// Коды с непосредственным html-эквивалентом
"#\[(b|i|u|s|strike|small|center|pre|tt|sub|sup)\](.+?)\[/\\1\]#is" => "<$1>$2</$1>",
"#\[br\]\n?#i" => "<br />",
"#\[hr\]\n?#i" => "<hr width=\"40%\" align=\"left\" />",
// (c) (r) and (tm)
"#\(c\)#i" => "&copy;",
"#\(tm\)#i" => "&#153;",
"#\(r\)#i" => "&reg;",
);
// коды цитирования
$Codes["quote"] = array(
// esc [q] [quote]
"#\[\[(/?)(q|quote)\]\]#is" => "&#91;$1$2&#93;",
"#\[\[(q|quote)=(\S+?)\]\]#is" =>"&#91;$1=$2&#93;",
// [quote] без автора
"#\[(q|quote)\](.*?)\[/\\1]#is" => "<blockquote class=\"title\">Цитата:</blockquote><blockquote class=\"body\">$2</blockquote>",
// "#\[(q|quote)=(.*?)\](.*?)\[/\\1]#is" => "<blockquote class=\"title\">Цитата ([user=$2]):</blockquote><blockquote class=\"body\">$3</blockquote>",
);
// коды ссылок
$Codes["url"] = array(
// esc [url] [MAIL]
"#\[\[(/?)(url|mail)\]\]#is" => "&#91;$1$2&#93;",
"#\[\[(url|mail)=(\S+?)\]\]#is" =>"&#91;$1=$2&#93;",
// Безопасность: убираем потенциальные ссылки на скрипты (\s* - защита от IE)
"#\[(?:url|mail)=.*?s\s*c\s*r\s*i\s*p\s*t\s*:.*?\]#is" =>
"<font class=\"warning\">&laquo;предупреждение: скрипты в постах запрещены&raquo;</font>",
"#\[(url|mail)\].*?s\s*c\s*r\s*i\s*p\s*t\s*:.*?\[/\\1\]#is" =>
"<font class=\"warning\">&laquo;предупреждение: скрипты в постах запрещены&raquo;</font>",
// [url]
"#\[url]\s*?(?!.*?\[(?:url).*?)(.*?)\s*?\[/url\]#is" =>
"<a href=\"$1\">$1</a>",
"#\[url=(\S*?)\]\s*?(?!.*?\[(?:url).*?)(.*?)\s*?\[/url\]#is" =>
"<a href=\"$1\">$2</a>",
"#\[url=(\S*?)\]#is" =>
"<a href=\"$1\">$1</a>",
// [MAIL]
"#\[mail]\s*?(?!.*?\[(?:mail).*?)(.*?)\s*?\[/mail\]#is" =>
"<a href=\"mailto:$1\">$1</a>",
"#\[mail=(\S*?)\]\s*?(?!.*?\[(?:mail).*?)(.*?)\s*?\[/mail\]#is" =>
"<a href=\"mailto:$1\">$2</a>",
"#\[mail=(\S*?)\]#is" =>
"<a href=\"mailto:$1\">$1</a>",
);
// коды для работы с текстом
$Codes["font"] = array(
// esc Кодов свойств шрифта [font] (face), [size], [color], [right]:
"#\[\[(font|size|color)=(.+?)\]\]#is" => "&#91;$1=$2&#93;",
"#\[\[/(font|size|color|right)\]\]#i" => "&#91;/$1&#93;",
"#\[\[right\]\]#i" => "&#91;right&#93;",
// Коды свойств шрифта [font] (face), [size], [color], [right]:
"#\[font=(.+?)\](.+?)\[/font\]#is" => "<font face=\"$1\">$2</font>",
"#\[(size|color)=(\S+?)\](.+?)\[/\\1\]#is" => "<font $1=\"$2\">$3</font>",
"#\[right\](.+?)\[/right\]#is" => "<font align=\"right\">$1</font>",
);
// коды info
$Codes["info"] = array(
//esc info tags
"#\[\[info:version\]\]#is" => "&#91;info:version&#93;",
"#\[\[info:author\]\]#is" => "&#91;info:author&#93;",
"#\[\[info:random\]\]#is" => "&#91;info:random&#93;",
"#\[\[info:random=(\d+?)\]\]#is" => "&#91;info:random=$1&#93;",
//info tags
"#\[info:version\]#is" => "VParser 1.0.1",
"#\[info:author\]#is" => "Vladislav Mokeev&#91;Vlad&#93;",
"#\[info:random\]#ise" => "rand(0,100)",
"#\[info:random=(\d+?)\]#ise" => "rand(0,$1)",
);
// коды оффтопика
$Codes["off"] = array(
// esc codes
"#\[\[(/?)off\]\]#is" => "&#91;$1off&#93;",
// [off] - оффтопик
"#\[off\]\s*(.+?)\s*\[/off\]#is" => "<font class=\"offtopic\">оффтопик: $1</font>",
"#/\*\s*(.+?)\s*\*/#is" => "<font class=\"offtopic\">оффтопик: $1</font>",
);
//расширенные коды
$Codes["added"] = array(
// esc codes
"#\[\[(user|def|acr|added)=(.+?)\]\]#is" => "&#91;$1=$2&#93;",
"#\[\[/(def|acr|added)\]\]#i" => "&#91;/$1&#93",
"#\[\[(added|time|date)\]\]#i" => "&#91;$1&#93;",
// Тег [user] - прямая ссылка на юзера
"#\[user=(.+?)\]#is" => "<a class=\"profile\" href=\"./profile.php?name=$1\">$1</a>",
// VParser 1.0.1: Теги [def] и [acr] - определение (всплывающая подсказка) для слова
"#\[def=(.+?)\]\s*(.+?)\s*\[/def\]#is" => "<a class=\"definition\" title=\"$1\">$2</a>",
"#\[acr=(.+?)\]\s*(.+?)\s*\[/acr\]#is" => "<acronym title=\"$1\">$2</acronym>",
// VParser 1.0.1:
"#\[added\](.+?)\[/added\]#is" => "<font class=\"added-title\">Добавлено:</font><br>$1",
"#\[added=(.+?)\](.+?)\[/added\]#is" => "<font class=\"added-title\">Добавлено ($1):</font><br>$2",
"#\[time\]#ie" => "'<span class=\"date\">'. date('G:i:s'). '</span>'",
"#\[date\]#ie" => "'<span class=\"time\">'. date('d.m.Y'). '</span>'",
);
// коды для вырезания не пропарсенных тегов
$Codes["delete"] = array(
// Удаление лишних (известных) тегов
"#\[/?(?:font|size|off|b|i|u|s|color|url|link|mail|img|image|center|right|pre|list|user|acr|def|info|time|date|debug|added).*?\]#is" => "",
);
?>
вот такие рег експы.
а вот так из надо применять:
Код:
foreach($Codes["url"] as $rule => $value)
while ( preg_match( $rule, $raw ) )
$raw = preg_replace($rule, $value, $raw, -1);
надеюсь снял все вопросы по данной теме?
PS
рег експы проверенный и вроде все баги пофиксены, и дыры тоже.
если что найдешь, то обязятельно напиши!
|