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 4538 2009-11-25 08:28:55Z RyanGordon $
|
*/
/*
| */
/*
|
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 275 | Zeile 290 |
---|
{ foreach($custom_mycode as $key => $mycode) {
|
{ foreach($custom_mycode as $key => $mycode) {
|
| $mycode['regex'] = str_replace("\x0", "", $mycode['regex']);
|
$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 { $mycode = $standard_mycode;
| else { $mycode = $standard_mycode;
|
Zeile 391 | Zeile 407 |
---|
{ 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 402 | 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(count($bad_matches[0]) > 0) {
| // If we matched any tags previously, swap them back in if(count($bad_matches[0]) > 0) {
|
Zeile 434 | Zeile 467 |
---|
/** * Parses a list of filtered/badwords in the specified message.
|
/** * Parses a list of filtered/badwords in the specified message.
|
* * @param string The message to be parsed.
| * * @param string The message to be parsed.
|
* @param array Array of parser options in yes/no format. * @return string The parsed message. */
| * @param array Array of parser options in yes/no format. * @return string The parsed message. */
|
Zeile 462 | Zeile 495 |
---|
{ $message = strip_tags($message); }
|
{ $message = strip_tags($message); }
|
return $message;
| return $message;
|
}
/**
| }
/**
|
Zeile 491 | 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 504 | Zeile 538 |
---|
* @return string The parsed text. */ function mycode_handle_size($size, $text)
|
* @return string The parsed text. */ function mycode_handle_size($size, $text)
|
{
| {
|
$size = intval($size)+10;
if($size > 50)
| $size = intval($size)+10;
if($size > 50)
|
Zeile 726 | Zeile 760 |
---|
{ $added_end_tag = true; $str = $str." \n?>";
|
{ $added_end_tag = true; $str = $str." \n?>";
|
}
| }
|
// If the PHP version < 4.2, catch highlight_string() output. if(version_compare(PHP_VERSION, "4.2.0", "<"))
|
// If the PHP version < 4.2, catch highlight_string() output. if(version_compare(PHP_VERSION, "4.2.0", "<"))
|
{
| {
|
ob_start(); @highlight_string($str); $code = ob_get_contents();
| ob_start(); @highlight_string($str); $code = ob_get_contents();
|
Zeile 739 | Zeile 773 |
---|
else { $code = @highlight_string($str, true);
|
else { $code = @highlight_string($str, true);
|
}
| }
|
// If < PHP 5, make XHTML compatible. if(version_compare(PHP_VERSION, "5", "<"))
| // If < PHP 5, make XHTML compatible. if(version_compare(PHP_VERSION, "5", "<"))
|
Zeile 765 | Zeile 799 |
---|
$code = str_replace("\\", '\', $code); $code = str_replace('$', '$', $code); $code = preg_replace("#&\#([0-9]+);#si", "&#$1;", $code);
|
$code = str_replace("\\", '\', $code); $code = str_replace('$', '$', $code); $code = preg_replace("#&\#([0-9]+);#si", "&#$1;", $code);
|
|
|
if($added_open_tag) { $code = preg_replace("#<code><span style=\"color: \#([A-Z0-9]{6})\"><\?php( | )(<br />?)#", "<code><span style=\"color: #$1\">", $code);
| if($added_open_tag) { $code = preg_replace("#<code><span style=\"color: \#([A-Z0-9]{6})\"><\?php( | )(<br />?)#", "<code><span style=\"color: #$1\">", $code);
|
Zeile 791 | Zeile 825 |
---|
// Send back the code all nice and pretty return "<div class=\"codeblock phpcodeblock\"><div class=\"title\">$lang->php_code\n</div><div class=\"body\">".$code."</div></div>\n"; }
|
// Send back the code all nice and pretty return "<div class=\"codeblock phpcodeblock\"><div class=\"title\">$lang->php_code\n</div><div class=\"body\">".$code."</div></div>\n"; }
|
|
|
/** * Parses URL MyCode. *
| /** * Parses URL MyCode. *
|
Zeile 804 | Zeile 838 |
---|
if(!preg_match("#^[a-z0-9]+://#i", $url)) { $url = "http://".$url;
|
if(!preg_match("#^[a-z0-9]+://#i", $url)) { $url = "http://".$url;
|
}
| }
|
$fullurl = $url;
|
$fullurl = $url;
|
|
|
$url = str_replace('&', '&', $url); $name = str_replace('&', '&', $name);
|
$url = str_replace('&', '&', $url); $name = str_replace('&', '&', $name);
|
|
|
if(!preg_match("#[a-z0-9]+://#i", $fullurl))
|
if(!preg_match("#[a-z0-9]+://#i", $fullurl))
|
{
| {
|
$fullurl = "http://".$fullurl; } if(!$name) { $name = $url;
|
$fullurl = "http://".$fullurl; } if(!$name) { $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);
|
|
|
if($name == $url && (!isset($this->options['shorten_urls']) || $this->options['shorten_urls'] != 0)) { if(my_strlen($url) > 55)
| if($name == $url && (!isset($this->options['shorten_urls']) || $this->options['shorten_urls'] != 0)) { if(my_strlen($url) > 55)
|
Zeile 830 | Zeile 865 |
---|
$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 $fullurl = strtr($fullurl, array('$' => '%24', '^' => '%5E', '`' => '%60', '[' => '%5B', ']' => '%5D', '{' => '%7B', '}' => '%7D', '"' => '%22', '<' => '%3C', '>' => '%3E', ' ' => '%20'));
|
$name = preg_replace("#&\#([0-9]+);#si", "&#$1;", $name); // Fix & but allow unicode $link = "<a href=\"$fullurl\" target=\"_blank\">$name</a>";
| $name = preg_replace("#&\#([0-9]+);#si", "&#$1;", $name); // Fix & but allow unicode $link = "<a href=\"$fullurl\" target=\"_blank\">$name</a>";
|
Zeile 881 | Zeile 919 |
---|
*/ 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 903 | Zeile 943 |
---|
*/ 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 952 | Zeile 1007 |
---|
{ $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; }
|