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 78 | Zeile 87 |
---|
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."/";
|
} }
| } }
|
// Set the options $this->options = $options;
|
// Set the options $this->options = $options;
|
$message = $plugins->run_hooks("parse_message_start", $message);
| $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);
|
Zeile 93 | Zeile 102 |
---|
if($options['filter_badwords']) { $message = $this->parse_badwords($message);
|
if($options['filter_badwords']) { $message = $this->parse_badwords($message);
|
}
| }
|
if($options['allow_html'] != 1) {
| if($options['allow_html'] != 1) {
|
Zeile 121 | Zeile 130 |
---|
// Always fix bad Javascript in the message. $message = $this->fix_javascript($message);
|
// Always fix bad Javascript in the message. $message = $this->fix_javascript($message);
|
|
|
// Replace "me" code and slaps if we have a username if($options['me_username']) {
| // Replace "me" code and slaps if we have a username if($options['me_username']) {
|
Zeile 135 | Zeile 144 |
---|
if($options['allow_smilies']) { $message = $this->parse_smilies($message, $options['allow_html']);
|
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 162 | Zeile 177 |
---|
if(my_strtolower($text[1]) == "code") { $code = $this->mycode_parse_code($text[2]);
|
if(my_strtolower($text[1]) == "code") { $code = $this->mycode_parse_code($text[2]);
|
}
| }
|
elseif(my_strtolower($text[1]) == "php") { $code = $this->mycode_parse_php($text[2]);
| elseif(my_strtolower($text[1]) == "php") { $code = $this->mycode_parse_php($text[2]);
|
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 264 | Zeile 279 |
---|
$standard_mycode['align']['regex'] = "#\[align=(left|center|right|justify)\](.*?)\[/align\]#si"; $standard_mycode['align']['replacement'] = "<div style=\"text-align: $1;\">$2</div>";
|
$standard_mycode['align']['regex'] = "#\[align=(left|center|right|justify)\](.*?)\[/align\]#si"; $standard_mycode['align']['replacement'] = "<div style=\"text-align: $1;\">$2</div>";
|
|
|
$standard_mycode['hr']['regex'] = "#\[hr\]#si"; $standard_mycode['hr']['replacement'] = "<hr />";
| $standard_mycode['hr']['regex'] = "#\[hr\]#si"; $standard_mycode['hr']['replacement'] = "<hr />";
|
Zeile 277 | Zeile 292 |
---|
{ $mycode['regex'] = str_replace("\x0", "", $mycode['regex']); $custom_mycode[$key]['regex'] = "#".$mycode['regex']."#si";
|
{ $mycode['regex'] = str_replace("\x0", "", $mycode['regex']); $custom_mycode[$key]['regex'] = "#".$mycode['regex']."#si";
|
}
| }
|
$mycode = array_merge($standard_mycode, $custom_mycode);
|
$mycode = array_merge($standard_mycode, $custom_mycode);
|
}
| }
|
else { $mycode = $standard_mycode;
|
else { $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'];
|
}
| }
|
}
/**
| }
/**
|
Zeile 330 | Zeile 345 |
---|
while(preg_match("#\[list=(a|A|i|I|1)\](.*?)\[/list\](\r\n?|\n?)#esi", $message)) { $message = preg_replace("#\s?\[list=(a|A|i|I|1)\](.*?)\[/list\]#esi", "\$this->mycode_parse_list('$2', '$1')\n", $message);
|
while(preg_match("#\[list=(a|A|i|I|1)\](.*?)\[/list\](\r\n?|\n?)#esi", $message)) { $message = preg_replace("#\s?\[list=(a|A|i|I|1)\](.*?)\[/list\]#esi", "\$this->mycode_parse_list('$2', '$1')\n", $message);
|
}
| }
|
// Convert images when allowed. if($options['allow_imgcode'] != 0) {
| // Convert images when allowed. if($options['allow_imgcode'] != 0) {
|
Zeile 387 | Zeile 402 |
---|
// Impose a hard limit of 500 smilies per message as to not overload the parser $remaining = 500;
|
// Impose a hard limit of 500 smilies per message as to not overload the parser $remaining = 500;
|
if(is_array($this->smilies_cache))
| if(is_array($this->smilies_cache))
|
{ foreach($this->smilies_cache as $find => $replace) {
|
{ foreach($this->smilies_cache as $find => $replace) {
|
$find = $this->parse_html($find);
| $find = $this->parse_html($find); $find = preg_quote($find, "#");
|
if(version_compare(PHP_VERSION, "5.1.0", ">=")) {
|
if(version_compare(PHP_VERSION, "5.1.0", ">=")) {
|
$message = preg_replace("#(?<=[^&;\"])".preg_quote($find,"#")."(?=.\W|\"|\W.|\W$)#si", $replace, $message, $remaining, $replacements);
| $orig_message = $message; $orig_find = $find; // Fix issues for smileys starting with a ";" if($find{0} == ";") { $find = "(?<!>|<|&)".$find; } $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 403 | Zeile 434 |
---|
} } else
|
} } else
|
{ $message = preg_replace("#(?<=[^&;\"])".preg_quote($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 we matched any tags previously, swap them back in
|
Zeile 415 | Zeile 447 |
---|
foreach($bad_matches[0] as $match) { $message = preg_replace("#<mybb-bad-sm>#", $match, $message, 1);
|
foreach($bad_matches[0] as $match) { $message = preg_replace("#<mybb-bad-sm>#", $match, $message, 1);
|
} }
| } }
|
return trim($message); }
| return trim($message); }
|
Zeile 441 | 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 455 | 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 492 | 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; }
| return $message; }
|
Zeile 615 | Zeile 648 |
---|
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]))
|
{
| {
|
if($match[1] < TIME_NOW) { $postdate = my_date($mybb->settings['dateformat'], intval($match[1]));
| if($match[1] < TIME_NOW) { $postdate = my_date($mybb->settings['dateformat'], intval($match[1]));
|
Zeile 810 | 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);
| $name = str_replace("\'", "'", $name); $url = str_replace("\'", "'", $url);
|
Zeile 831 | 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;
|
Zeile 882 | Zeile 915 |
---|
*/ function mycode_parse_email($email, $name="") {
|
*/ function mycode_parse_email($email, $name="") {
|
| $name = str_replace("\\'", "'", $name); $email = str_replace("\\'", "'", $email);
|
if(!$name) { $name = $email;
| if(!$name) { $name = $email;
|
Zeile 904 | 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); return $message; }
| $message = my_substr($message, 1); return $message; }
|
Zeile 953 | 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; }
|