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 5379 2011-02-21 11:06:42Z Tomm $
|
*/
/*
| */
/*
|
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 105 | Zeile 114 |
---|
{ $message = preg_replace("#<script(.*)>(.*)</script(.*)>#is", "<script$1>$2</script$3>", $message); }
|
{ $message = preg_replace("#<script(.*)>(.*)</script(.*)>#is", "<script$1>$2</script$3>", $message); }
|
// Remove these completely $message = preg_replace("#\s*<base[^>]*>\s*#is", "", $message); $message = preg_replace("#\s*<meta[^>]*>\s*#is", "", $message);
|
|
$message = str_replace(array('<?php', '<!--', '-->', '?>', "<br />\n", "<br>\n"), array('<?php', '<!--', '-->', '?>', "\n", "\n"), $message);
|
$message = str_replace(array('<?php', '<!--', '-->', '?>', "<br />\n", "<br>\n"), array('<?php', '<!--', '-->', '?>', "\n", "\n"), $message);
|
}
| }
|
// If MyCode needs to be replaced, first filter out [code] and [php] tags. if($options['allow_mycode']) {
|
// If MyCode needs to be replaced, first filter out [code] and [php] tags. if($options['allow_mycode']) {
|
// 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); }
| 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); }
|
Zeile 138 | Zeile 144 |
---|
}
// Replace MyCode if requested.
|
}
// Replace MyCode if requested.
|
if($options['allow_mycode']) {
| 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 153 | Zeile 165 |
---|
{ foreach($code_matches as $text) {
|
{ foreach($code_matches as $text) {
|
// Fix up HTML inside the code tags so it is clean if($options['allow_html'] != 0) { $text[2] = $this->parse_html($text[2]); }
| |
if(my_strtolower($text[1]) == "code")
|
if(my_strtolower($text[1]) == "code")
|
{
| {
|
$code = $this->mycode_parse_code($text[2]);
|
$code = $this->mycode_parse_code($text[2]);
|
}
| }
|
elseif(my_strtolower($text[1]) == "php") { $code = $this->mycode_parse_php($text[2]); } $message = preg_replace("#\<mybb-code>\n?#", $code, $message, 1);
|
elseif(my_strtolower($text[1]) == "php") { $code = $this->mycode_parse_php($text[2]); } $message = preg_replace("#\<mybb-code>\n?#", $code, $message, 1);
|
} } }
| } } }
// Replace meta and base tags in our post - these are > dangerous < if($this->options['allow_html']) { $message = preg_replace_callback("#<((m[^a])|(b[^diloru>])|(s[^aemptu>]))(\s*[^>]*)>#si", create_function( '$matches', 'return htmlspecialchars($matches[0]);' ), $message); }
|
if($options['nl2br'] !== 0) {
| if($options['nl2br'] !== 0) {
|
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 392 | 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", ">=")) {
|
$find = preg_quote($find, "#"); if(version_compare(PHP_VERSION, "5.1.0", ">=")) {
|
| $orig_message = $message; $orig_find = $find;
|
// Fix issues for smileys starting with a ";" if($find{0} == ";") { $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);
| $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 we matched any tags previously, swap them back in
|
Zeile 443 | 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 array Array of parser options in yes/no format. * @return string The parsed message.
| * @param string The message to be parsed. * @param array Array of parser options in yes/no format. * @return string The parsed message.
|
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 471 | Zeile 495 |
---|
{ $message = strip_tags($message); }
|
{ $message = strip_tags($message); }
|
return $message;
| return $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; }
| return $message; }
|
Zeile 511 | Zeile 536 |
---|
* @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.
|
*/
| */
|
function mycode_handle_size($size, $text) { $size = intval($size)+10;
| function mycode_handle_size($size, $text) { $size = intval($size)+10;
|
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);
| $name = str_replace("\'", "'", $name); $url = str_replace("\'", "'", $url);
|
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;
|
Zeile 890 | 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 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); return $message; }
| $message = my_substr($message, 1); return $message; }
|
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; }
|