Zeile 6 | Zeile 6 |
---|
* Website: http://www.mybboard.net * License: http://www.mybboard.net/about/license *
|
* Website: http://www.mybboard.net * License: http://www.mybboard.net/about/license *
|
* $Id: class_parser.php 4052 2008-07-29 15:45:49Z Tikitiki $
| * $Id: class_parser.php 4817 2010-03-17 14:09:32Z Huji $
|
*/
/*
| */
/*
|
Zeile 18 | Zeile 18 |
---|
filter_badwords me_username shorten_urls
|
filter_badwords me_username shorten_urls
|
| highlight
|
) */
| ) */
|
Zeile 50 | Zeile 51 |
---|
* @var string */ var $base_url;
|
* @var string */ var $base_url;
|
| /** * Parsed Highlights cache * * @access private * @var array */ var $highlight_cache = array();
|
/** * Options for this parsed message (Private - set by parse_message argument)
| /** * Options for this parsed message (Private - set by parse_message argument)
|
Zeile 58 | Zeile 67 |
---|
* @var array */ var $options;
|
* @var array */ var $options;
|
|
|
/** * Parses a message with the specified options. *
| /** * Parses a message with the specified options. *
|
Zeile 74 | Zeile 83 |
---|
$this->base_url = $mybb->settings['bburl'];
if($this->base_url != "")
|
$this->base_url = $mybb->settings['bburl'];
if($this->base_url != "")
|
{
| {
|
if(my_substr($this->base_url, my_strlen($this->base_url) -1) != "/") { $this->base_url = $this->base_url."/";
| if(my_substr($this->base_url, my_strlen($this->base_url) -1) != "/") { $this->base_url = $this->base_url."/";
|
Zeile 85 | Zeile 94 |
---|
$this->options = $options;
$message = $plugins->run_hooks("parse_message_start", $message);
|
$this->options = $options;
$message = $plugins->run_hooks("parse_message_start", $message);
|
|
|
// Get rid of cartridge returns for they are the workings of the devil $message = str_replace("\r", "", $message);
|
// Get rid of cartridge returns for they are the workings of the devil $message = str_replace("\r", "", $message);
|
|
|
// Filter bad words if requested. if($options['filter_badwords']) {
| // Filter bad words if requested. if($options['filter_badwords']) {
|
Zeile 96 | Zeile 105 |
---|
}
if($options['allow_html'] != 1)
|
}
if($options['allow_html'] != 1)
|
{
| {
|
$message = $this->parse_html($message); } else
| $message = $this->parse_html($message); } else
|
Zeile 117 | Zeile 126 |
---|
// First we split up the contents of code and php tags to ensure they're not parsed. preg_match_all("#\[(code|php)\](.*?)\[/\\1\](\r\n?|\n?)#si", $message, $code_matches, PREG_SET_ORDER); $message = preg_replace("#\[(code|php)\](.*?)\[/\\1\](\r\n?|\n?)#si", "<mybb-code>\n", $message);
|
// First we split up the contents of code and php tags to ensure they're not parsed. preg_match_all("#\[(code|php)\](.*?)\[/\\1\](\r\n?|\n?)#si", $message, $code_matches, PREG_SET_ORDER); $message = preg_replace("#\[(code|php)\](.*?)\[/\\1\](\r\n?|\n?)#si", "<mybb-code>\n", $message);
|
}
| }
|
// Always fix bad Javascript in the message. $message = $this->fix_javascript($message);
| // Always fix bad Javascript in the message. $message = $this->fix_javascript($message);
|
Zeile 129 | Zeile 138 |
---|
$message = preg_replace('#(>|^|\r|\n)/me ([^\r\n<]*)#i', "\\1<span style=\"color: red;\">* {$options['me_username']} \\2</span>", $message); $message = preg_replace('#(>|^|\r|\n)/slap ([^\r\n<]*)#i', "\\1<span style=\"color: red;\">* {$options['me_username']} {$lang->slaps} \\2 {$lang->with_trout}</span>", $message);
|
$message = preg_replace('#(>|^|\r|\n)/me ([^\r\n<]*)#i', "\\1<span style=\"color: red;\">* {$options['me_username']} \\2</span>", $message); $message = preg_replace('#(>|^|\r|\n)/slap ([^\r\n<]*)#i', "\\1<span style=\"color: red;\">* {$options['me_username']} {$lang->slaps} \\2 {$lang->with_trout}</span>", $message);
|
}
| }
|
// If we can, parse smilies if($options['allow_smilies']) { $message = $this->parse_smilies($message, $options['allow_html']);
|
// If we can, parse smilies if($options['allow_smilies']) { $message = $this->parse_smilies($message, $options['allow_html']);
|
}
| }
|
// Replace MyCode if requested. if($options['allow_mycode'])
|
// Replace MyCode if requested. if($options['allow_mycode'])
|
{
| {
|
$message = $this->parse_mycode($message, $options);
|
$message = $this->parse_mycode($message, $options);
|
| } // Parse Highlights if($options['highlight']) { $message = $this->highlight_message($message, $options['highlight']);
|
}
// Run plugin hooks
| }
// Run plugin hooks
|
Zeile 232 | Zeile 247 |
---|
$standard_mycode['reg']['regex'] = "#\(r\)#i"; $standard_mycode['reg']['replacement'] = "®";
|
$standard_mycode['reg']['regex'] = "#\(r\)#i"; $standard_mycode['reg']['replacement'] = "®";
|
$standard_mycode['url_simple']['regex'] = "#\[url\]([a-z]+?://)([^\r\n\"\[<]+?)\[/url\]#sei";
| $standard_mycode['url_simple']['regex'] = "#\[url\]([a-z]+?://)([^\r\n\"<]+?)\[/url\]#sei";
|
$standard_mycode['url_simple']['replacement'] = "\$this->mycode_parse_url(\"$1$2\")";
|
$standard_mycode['url_simple']['replacement'] = "\$this->mycode_parse_url(\"$1$2\")";
|
$standard_mycode['url_simple2']['regex'] = "#\[url\]([^\r\n\"\[<]+?)\[/url\]#ei";
| $standard_mycode['url_simple2']['regex'] = "#\[url\]([^\r\n\"<]+?)\[/url\]#ei";
|
$standard_mycode['url_simple2']['replacement'] = "\$this->mycode_parse_url(\"$1\")";
|
$standard_mycode['url_simple2']['replacement'] = "\$this->mycode_parse_url(\"$1\")";
|
$standard_mycode['url_complex']['regex'] = "#\[url=([a-z]+?://)([^\r\n\"\[<]+?)\](.+?)\[/url\]#esi";
| $standard_mycode['url_complex']['regex'] = "#\[url=([a-z]+?://)([^\r\n\"<]+?)\](.+?)\[/url\]#esi";
|
$standard_mycode['url_complex']['replacement'] = "\$this->mycode_parse_url(\"$1$2\", \"$3\")";
|
$standard_mycode['url_complex']['replacement'] = "\$this->mycode_parse_url(\"$1$2\", \"$3\")";
|
$standard_mycode['url_complex2']['regex'] = "#\[url=([^\r\n\"\[<&\(\)]+?)\](.+?)\[/url\]#esi";
| $standard_mycode['url_complex2']['regex'] = "#\[url=([^\r\n\"<&\(\)]+?)\](.+?)\[/url\]#esi";
|
$standard_mycode['url_complex2']['replacement'] = "\$this->mycode_parse_url(\"$1\", \"$2\")";
$standard_mycode['email_simple']['regex'] = "#\[email\](.*?)\[/email\]#ei";
| $standard_mycode['url_complex2']['replacement'] = "\$this->mycode_parse_url(\"$1\", \"$2\")";
$standard_mycode['email_simple']['regex'] = "#\[email\](.*?)\[/email\]#ei";
|
Zeile 279 | Zeile 294 |
---|
$custom_mycode[$key]['regex'] = "#".$mycode['regex']."#si"; } $mycode = array_merge($standard_mycode, $custom_mycode);
|
$custom_mycode[$key]['regex'] = "#".$mycode['regex']."#si"; } $mycode = array_merge($standard_mycode, $custom_mycode);
|
}
| }
|
else
|
else
|
{
| {
|
$mycode = $standard_mycode;
|
$mycode = $standard_mycode;
|
}
| }
|
// Assign the MyCode to the cache. foreach($mycode as $code) { $this->mycode_cache['find'][] = $code['regex']; $this->mycode_cache['replacement'][] = $code['replacement'];
|
// Assign the MyCode to the cache. foreach($mycode as $code) { $this->mycode_cache['find'][] = $code['regex']; $this->mycode_cache['replacement'][] = $code['replacement'];
|
} }
/**
| } }
/**
|
* Parses MyCode tags in a specific message with the specified options. * * @param string The message to be parsed.
| * Parses MyCode tags in a specific message with the specified options. * * @param string The message to be parsed.
|
Zeile 363 | Zeile 378 |
---|
} } }
|
} } }
|
|
|
/** * Parses smilie code in the specified message. *
| /** * Parses smilie code in the specified message. *
|
Zeile 391 | Zeile 406 |
---|
if(is_array($this->smilies_cache)) { foreach($this->smilies_cache as $find => $replace)
|
if(is_array($this->smilies_cache)) { foreach($this->smilies_cache as $find => $replace)
|
{ $find = $this->parse_html($find);
| { $find = $this->parse_html($find);
|
$find = preg_quote($find, "#");
|
$find = preg_quote($find, "#");
|
|
|
if(version_compare(PHP_VERSION, "5.1.0", ">=")) {
|
if(version_compare(PHP_VERSION, "5.1.0", ">=")) {
|
| $orig_message = $message; $orig_find = $find;
|
// Fix issues for smileys starting with a ";" if($find{0} == ";")
|
// Fix issues for smileys starting with a ";" if($find{0} == ";")
|
{
| {
|
$find = "(?<!>|<|&)".$find;
|
$find = "(?<!>|<|&)".$find;
|
}
| } $message = @preg_replace("#(?<=[^\"])".$find."(?=.\W|\"|\W.|\W$)#si", $replace, $message, $remaining, $replacements);
|
|
|
$message = preg_replace("#(?<=[^\"])".$find."(?=.\W|\"|\W.|\W$)#si", $replace, $message, $remaining, $replacements);
| if($message == null) { $message = preg_replace("#(?<=[^&;\"])".$orig_find."(?=.\W|\"|\W.|\W$)#si", $replace, $orig_message, $remaining); }
|
$remaining -= $replacements; if($remaining <= 0) {
| $remaining -= $replacements; if($remaining <= 0) {
|
Zeile 415 | Zeile 438 |
---|
$message = preg_replace("#(?<=[^&;\"])".$find."(?=.\W|\"|\W.|\W$)#si", $replace, $message, $remaining); } }
|
$message = preg_replace("#(?<=[^&;\"])".$find."(?=.\W|\"|\W.|\W$)#si", $replace, $message, $remaining); } }
|
| unset($orig_message, $orig_find);
|
}
// If we matched any tags previously, swap them back in if(count($bad_matches[0]) > 0) { foreach($bad_matches[0] as $match)
|
}
// If we matched any tags previously, swap them back in if(count($bad_matches[0]) > 0) { foreach($bad_matches[0] as $match)
|
{
| {
|
$message = preg_replace("#<mybb-bad-sm>#", $match, $message, 1); } }
|
$message = preg_replace("#<mybb-bad-sm>#", $match, $message, 1); } }
|
|
|
return trim($message); }
| return trim($message); }
|
Zeile 435 | Zeile 459 |
---|
* @access private */ function cache_badwords()
|
* @access private */ function cache_badwords()
|
{
| {
|
global $cache; $this->badwords_cache = array(); $this->badwords_cache = $cache->read("badwords");
| global $cache; $this->badwords_cache = array(); $this->badwords_cache = $cache->read("badwords");
|
Zeile 449 | Zeile 473 |
---|
* @return string The parsed message. */ function parse_badwords($message, $options=array())
|
* @return string The parsed message. */ function parse_badwords($message, $options=array())
|
{
| {
|
if($this->badwords_cache == 0) { $this->cache_badwords();
| if($this->badwords_cache == 0) { $this->cache_badwords();
|
Zeile 463 | Zeile 487 |
---|
{ $badword['replacement'] = "*****"; }
|
{ $badword['replacement'] = "*****"; }
|
$badword['badword'] = preg_quote($badword['badword']);
| $badword['badword'] = preg_quote($badword['badword'], "#");
|
$message = preg_replace("#(\b|^)".$badword['badword']."(\b|$)#i", "\\1".$badword['replacement']."\\2", $message); } }
| $message = preg_replace("#(\b|^)".$badword['badword']."(\b|$)#i", "\\1".$badword['replacement']."\\2", $message); } }
|
Zeile 500 | Zeile 524 |
---|
"#(o)(nunload\s?=)#i", "#(o)(nkeypress\s?=)#i" );
|
"#(o)(nunload\s?=)#i", "#(o)(nkeypress\s?=)#i" );
|
$message = preg_replace($js_array, "$1<strong></strong>$2", $message);
| $message = preg_replace($js_array, "$1<strong></strong>$2$4", $message);
|
return $message; } /** * Handles fontsize.
|
return $message; } /** * Handles fontsize.
|
*
| *
|
* @param string The original size. * @param string The text within a size tag. * @return string The parsed text.
| * @param string The original size. * @param string The text within a size tag. * @return string The parsed text.
|
Zeile 519 | Zeile 544 |
---|
if($size > 50) { $size = 50;
|
if($size > 50) { $size = 50;
|
}
$text = "<span style=\"font-size: {$size}pt;\">".str_replace("\'", "'", $text)."</span>";
| }
$text = "<span style=\"font-size: {$size}pt;\">".str_replace("\'", "'", $text)."</span>";
|
return $text; }
| return $text; }
|
Zeile 534 | Zeile 559 |
---|
* @return string The parsed message. */ function mycode_parse_quotes($message, $text_only=false)
|
* @return string The parsed message. */ function mycode_parse_quotes($message, $text_only=false)
|
{
| {
|
global $lang, $templates, $theme, $mybb;
// Assign pattern and replace values.
| global $lang, $templates, $theme, $mybb;
// Assign pattern and replace values.
|
Zeile 548 | Zeile 573 |
---|
$replace = array( "\$this->mycode_parse_post_quotes('$2','$1')", "<blockquote><cite>$lang->quote</cite>$1</blockquote>\n"
|
$replace = array( "\$this->mycode_parse_post_quotes('$2','$1')", "<blockquote><cite>$lang->quote</cite>$1</blockquote>\n"
|
); }
| ); }
|
else
|
else
|
{
| {
|
$replace = array( "\$this->mycode_parse_post_quotes('$2', '$1', true)", "\n{$lang->quote}\n--\n$1\n--\n" );
|
$replace = array( "\$this->mycode_parse_post_quotes('$2', '$1', true)", "\n{$lang->quote}\n--\n$1\n--\n" );
|
}
| }
|
while(preg_match($pattern[0], $message) || preg_match($pattern[1], $message)) { $message = preg_replace($pattern, $replace, $message);
|
while(preg_match($pattern[0], $message) || preg_match($pattern[1], $message)) { $message = preg_replace($pattern, $replace, $message);
|
}
| }
|
if($text_only == false) { $find = array(
| if($text_only == false) { $find = array(
|
Zeile 575 | Zeile 600 |
---|
"</blockquote>" ); $message = preg_replace($find, $replace, $message);
|
"</blockquote>" ); $message = preg_replace($find, $replace, $message);
|
}
| }
|
return $message; }
| return $message; }
|
Zeile 617 | Zeile 642 |
---|
} $username = preg_replace("#(?:"|\"|')? pid=(?:"|\"|')?[0-9]+[\"']?(?:"|\"|')?#i", '', $username);
|
} $username = preg_replace("#(?:"|\"|')? pid=(?:"|\"|')?[0-9]+[\"']?(?:"|\"|')?#i", '', $username);
|
$delete_quote = false; }
| $delete_quote = false; }
|
unset($match); preg_match("#dateline=(?:"|\"|')?([0-9]+)(?:"|\"|')?#i", $username, $match); if(intval($match[1]))
| unset($match); preg_match("#dateline=(?:"|\"|')?([0-9]+)(?:"|\"|')?#i", $username, $match); if(intval($match[1]))
|
Zeile 818 | Zeile 843 |
---|
$url = str_replace('&', '&', $url); $name = str_replace('&', '&', $name);
|
$url = str_replace('&', '&', $url); $name = str_replace('&', '&', $name);
|
if(!preg_match("#[a-z0-9]+://#i", $fullurl)) { $fullurl = "http://".$fullurl; } if(!$name)
| if(!$name)
|
{ $name = $url;
|
{ $name = $url;
|
}
| }
|
$name = str_replace("\'", "'", $name); $url = str_replace("\'", "'", $url); $fullurl = str_replace("\'", "'", $fullurl);
| $name = str_replace("\'", "'", $name); $url = str_replace("\'", "'", $url); $fullurl = str_replace("\'", "'", $fullurl);
|
Zeile 839 | Zeile 860 |
---|
$name = my_substr($url, 0, 40)."...".my_substr($url, -10); } }
|
$name = my_substr($url, 0, 40)."...".my_substr($url, -10); } }
|
| // Fix some entities in URLs $entities = array('$' => '%24', '$' => '%24', '^' => '%5E', '`' => '%60', '[' => '%5B', ']' => '%5D', '{' => '%7B', '}' => '%7D', '"' => '%22', '<' => '%3C', '>' => '%3E', ' ' => '%20'); $fullurl = str_replace(array_keys($entities), array_values($entities), $fullurl);
|
$name = preg_replace("#&\#([0-9]+);#si", "&#$1;", $name); // Fix & but allow unicode $link = "<a href=\"$fullurl\" target=\"_blank\">$name</a>"; return $link;
|
$name = preg_replace("#&\#([0-9]+);#si", "&#$1;", $name); // Fix & but allow unicode $link = "<a href=\"$fullurl\" target=\"_blank\">$name</a>"; return $link;
|
}
/**
| }
/**
|
* Parses IMG MyCode. * * @param string The URL to the image
| * Parses IMG MyCode. * * @param string The URL to the image
|
Zeile 887 | Zeile 912 |
---|
* @param string The email address to link to. * @param string The name for the link. * @return string The built-up email link.
|
* @param string The email address to link to. * @param string The name for the link. * @return string The built-up email link.
|
*/
| */
|
function mycode_parse_email($email, $name="") {
|
function mycode_parse_email($email, $name="") {
|
| $name = str_replace("\\'", "'", $name); $email = str_replace("\\'", "'", $email);
|
if(!$name)
|
if(!$name)
|
{
| {
|
$name = $email;
|
$name = $email;
|
}
| }
|
if(preg_match("/^([a-zA-Z0-9-_\+\.]+?)@[a-zA-Z0-9-]+\.[a-zA-Z0-9\.-]+$/si", $email)) { return "<a href=\"mailto:$email\">".$name."</a>";
| if(preg_match("/^([a-zA-Z0-9-_\+\.]+?)@[a-zA-Z0-9-]+\.[a-zA-Z0-9\.-]+$/si", $email)) { return "<a href=\"mailto:$email\">".$name."</a>";
|
Zeile 901 | Zeile 928 |
---|
else { return $email;
|
else { return $email;
|
} }
| } }
|
/** * Parses URLs automatically. *
| /** * Parses URLs automatically. *
|
Zeile 912 | Zeile 939 |
---|
*/ function mycode_auto_url($message) {
|
*/ function mycode_auto_url($message) {
|
$message = " ".$message; $message = preg_replace("#([\>\s\(\)])(https?|ftp|news){1}://([\w\-]+\.([\w\-]+\.)*[\w]+(:[0-9]+)?(/[^\"\s<\[]*)?)#i", "$1[url]$2://$3[/url]", $message); $message = preg_replace("#([\>\s\(\)])(www|ftp)\.(([\w\-]+\.)*[\w]+(:[0-9]+)?(/[^\"\s<\[]*)?)#i", "$1[url]$2.$3[/url]", $message);
| static $utf8_pcre_supported; if(!isset($utf8_pcre_supported)) { $utf8_pcre_supported = @preg_match('#^.#u', 'a'); } if($utf8_pcre_supported) { $utf8_regex_chr = "u"; } else { $utf8_regex_chr = ""; } $message = " ".$message; $message = preg_replace("#([\>\s\(\)])(https?|ftp|news){1}://([\w\-]+\.([\w\-]+\.)*[\w]+(:[0-9]+)?(/[^\"\s<\[]*)?)#i".$utf8_regex_chr, "$1[url]$2://$3[/url]", $message); $message = preg_replace("#([\>\s\(\)])(www|ftp)\.(([\w\-]+\.)*[\w]+(:[0-9]+)?(/[^\"\s<\[]*)?)#i".$utf8_regex_chr, "$1[url]$2.$3[/url]", $message);
|
$message = my_substr($message, 1);
|
$message = my_substr($message, 1);
|
return $message; }
| return $message; }
|
/** * Parses list MyCode. *
| /** * Parses list MyCode. *
|
Zeile 932 | Zeile 974 |
---|
$message = str_replace('\"', '"', $message); $message = preg_replace("#\s*\[\*\]\s*#", "</li>\n<li>", $message); $message .= "</li>";
|
$message = str_replace('\"', '"', $message); $message = preg_replace("#\s*\[\*\]\s*#", "</li>\n<li>", $message); $message .= "</li>";
|
|
|
if($type) { $list = "\n<ol type=\"$type\">$message</ol>\n";
| if($type) { $list = "\n<ol type=\"$type\">$message</ol>\n";
|
Zeile 961 | Zeile 1003 |
---|
{ $message = str_replace($this->smilies_cache, array_keys($this->smilies_cache), $message); }
|
{ $message = str_replace($this->smilies_cache, array_keys($this->smilies_cache), $message); }
|
| return $message; } /** * Highlights a string * * @param string The message to be highligted * @param string The highlight keywords * @return string The message with highlight bbcodes */ function highlight_message($message, $highlight) { if(empty($this->highlight_cache)) { $this->highlight_cache = build_highlight_array($highlight); } if(is_array($this->highlight_cache) && !empty($this->highlight_cache)) { $message = preg_replace(array_keys($this->highlight_cache), $this->highlight_cache, $message); }
|
return $message; }
| return $message; }
|