Fixed quotes having bbcodes in author name

git-svn-id: file:///svn/phpbb/trunk@3997 89ea8834-ac86-4346-8a33-228a782c2dd0
This commit is contained in:
Ludovic Arnaud 2003-05-09 20:24:15 +00:00
parent 2fc8842b0f
commit b5d4bc5ced

View file

@ -185,7 +185,7 @@ class parse_message
// [quote] moved to the second position // [quote] moved to the second position
$this->bbcode_array = array( $this->bbcode_array = array(
8 => array('#\[code(?:=([a-z]+))?\](.+\[/code\])#ise' => "\$this->bbcode_code('\\1', '\\2')"), 8 => array('#\[code(?:=([a-z]+))?\](.+\[/code\])#ise' => "\$this->bbcode_code('\\1', '\\2')"),
0 => array('#\[quote(?:="(.*?)")?\](.+)\[/quote\]#ise'=> "\$this->bbcode_quote('\\0')"), 0 => array('#\[quote(?:="(.*?)")\](.+)\[/quote\]#ise'=> "\$this->bbcode_quote('\\0')"),
// TODO: validation regexp // TODO: validation regexp
11 => array('#\[flash\](.*?)\[/flash\]#i' => '[flash:' . $this->bbcode_uid . ']\1[/flash:' . $this->bbcode_uid . ']'), 11 => array('#\[flash\](.*?)\[/flash\]#i' => '[flash:' . $this->bbcode_uid . ']\1[/flash:' . $this->bbcode_uid . ']'),
10 => array('#\[email(=.*?)?\](.*?)\[/email\]#ise' => "\$this->validate_email('\\1', '\\2')"), 10 => array('#\[email(=.*?)?\](.*?)\[/email\]#ise' => "\$this->validate_email('\\1', '\\2')"),
@ -233,6 +233,8 @@ class parse_message
function bbcode_quote_username($username) function bbcode_quote_username($username)
{ {
echo "<pre><hr>processing <b>$username</b><hr></pre>";
if (!$username) if (!$username)
{ {
return ''; return '';
@ -407,6 +409,7 @@ class parse_message
$in = substr(stripslashes($in), 1); $in = substr(stripslashes($in), 1);
$close_tags = array(); $close_tags = array();
$buffer = '';
do do
{ {
@ -420,7 +423,7 @@ class parse_message
} }
} }
$buffer = substr($in, 0, $pos); $buffer .= substr($in, 0, $pos);
$tok = $in{$pos}; $tok = $in{$pos};
$in = substr($in, $pos + 1); $in = substr($in, $pos + 1);
@ -428,26 +431,49 @@ class parse_message
{ {
if ($buffer == '/quote' && count($close_tags)) if ($buffer == '/quote' && count($close_tags))
{ {
// we have found a closing tag
$tag = array_pop($close_tags); $tag = array_pop($close_tags);
$out .= $tag . ']'; $out .= $tag . ']';
$tok = '['; $tok = '[';
$buffer = '';
} }
elseif (preg_match('#quote(?:="(.*?)")?#is', $buffer, $m)) elseif (preg_match('#^quote(?:="(.*?)")?$#is', $buffer, $m))
{ {
// the buffer holds a valid opening tag
array_push($close_tags, '/quote:' . $this->bbcode_uid); array_push($close_tags, '/quote:' . $this->bbcode_uid);
$out .= $buffer . ':' . $this->bbcode_uid . ']';
if (!empty($m[1]))
{
// here we can check for valid bbcode pairs or whatever
$username = $m[1];
$out .= 'quote="' . $username . '":' . $this->bbcode_uid . ']';
}
else
{
$out .= 'quote:' . $this->bbcode_uid . ']';
}
$tok = '['; $tok = '[';
$buffer = '';
}
elseif (preg_match('#^quote="(.*?)#is', $buffer, $m))
{
// the buffer holds an invalid opening tag
$buffer .= ']';
} }
else else
{ {
$out .= $buffer . $tok; $out .= $buffer . $tok;
$tok = '[]'; $tok = '[]';
$buffer = '';
} }
} }
else else
{ {
$out .= $buffer . $tok; $out .= $buffer . $tok;
$tok = ($tok == '[') ? ']' : '[]'; $tok = ($tok == '[') ? ']' : '[]';
$buffer = '';
} }
} }
while ($in); while ($in);