Target

Forum_Lexicon_Desc

Target

Beitragvon wicher » 12. Mär 2006 13:09

When i put in as a lexicon word the word Target, and in the description of any other word i put a url like http://www.somesite.com then in the lexicon it grabs from that url the html code "Target" and then the actuall link is only displayed as text. The "Target" code however is displayed as an lexicon word and links to the lexicon word "Target".
I also have rlink installed and locallinks.

phpbb reforms the url i put in, within the bbcodes [url], to something like
Code: Alles auswählen
<a href="rlink/rlink.php?url=http://www.degulden.nl/" target="_blank">http://www.degulden.nl/</a>


lexicon reforms the link as:
Code: Alles auswählen
<a href="rlink/rlink.php?url=http://www.degulden.nl/" <a href="lexicon.php?letter=Target" class="crosslink">Target</a>="_blank">http://www.degulden.nl/</a>


is there a way arround this problem?
Benutzeravatar
wicher
User
 
Beiträge: 32
Registriert: 9. Feb 2006 01:11
Wohnort: Netherlands

Beitragvon AmigaLink » 12. Mär 2006 13:53

In original the crosslink generation is case sensitive. Thus this problem cannot occur if you write the keyword great (look at my lexicon eg here) ;).
Die deutsche Sprache ist Freeware, du kannst sie benutzen, ohne dafür zu bezahlen. Sie ist aber nicht Open Source, also darfst du sie nicht verändern, wie es dir gerade passt.
Benutzeravatar
AmigaLink
Administrator
 
Beiträge: 3987
Registriert: 11. Aug 2004 01:06
Wohnort: NRW

Beitragvon wicher » 12. Mär 2006 14:01

Somehow, the lexicon replaces the "target" that is within the html code of the url, with the lexicon word.
Even if i put the word in the lexicon in uppercase like "TARGET" it takes it out of the html code like it is a lexicon word even if it is there in lowercase.
Benutzeravatar
wicher
User
 
Beiträge: 32
Registriert: 9. Feb 2006 01:11
Wohnort: Netherlands

Beitragvon AmigaLink » 12. Mär 2006 14:16

That happens because you have disabled case sensitive!
Make this change retrogressive and your problem does not exist any longer.
An other way does not exist at this version of the MOD. In a future version I hope to find a better way to create the crosslinks.
Zuletzt geändert von AmigaLink am 12. Mär 2006 17:53, insgesamt 1-mal geändert.
Die deutsche Sprache ist Freeware, du kannst sie benutzen, ohne dafür zu bezahlen. Sie ist aber nicht Open Source, also darfst du sie nicht verändern, wie es dir gerade passt.
Benutzeravatar
AmigaLink
Administrator
 
Beiträge: 3987
Registriert: 11. Aug 2004 01:06
Wohnort: NRW

Beitragvon wicher » 12. Mär 2006 17:10

Thanks for the link, i'll try that.
Benutzeravatar
wicher
User
 
Beiträge: 32
Registriert: 9. Feb 2006 01:11
Wohnort: Netherlands

Beitragvon wicher » 12. Mär 2006 18:58

In anyway, thanks for your time to answer my questions.
But i have to say that even with the original files of this, btw great, mod i had this same problem.
All i can think off is that my problem is elsewhere in my phpbb files.
Benutzeravatar
wicher
User
 
Beiträge: 32
Registriert: 9. Feb 2006 01:11
Wohnort: Netherlands

Beitragvon AmigaLink » 12. Mär 2006 19:07

:shock: You uses the original files (with case sesitive) and the Problem exists???
Die deutsche Sprache ist Freeware, du kannst sie benutzen, ohne dafür zu bezahlen. Sie ist aber nicht Open Source, also darfst du sie nicht verändern, wie es dir gerade passt.
Benutzeravatar
AmigaLink
Administrator
 
Beiträge: 3987
Registriert: 11. Aug 2004 01:06
Wohnort: NRW

Beitragvon wicher » 13. Mär 2006 12:56

AmigaLink hat geschrieben::shock: You uses the original files (with case sesitive) and the Problem exists???


Yes, but now i dont use the original files anymore, i editted them here and there.
But i did not change anything what could affect this change not to work.
It all works fine, but when i change that e to an i it gets crumbled up things.

Dont know why that is.

here a screendump of the result before i make the change e to i and one after i made the change in functions_lexicon.php.

Before:
with codeline
$message = str_replace('"', '"', substr(preg_replace('#(\µ(((?>([^µ§]+|(?R)))*)\§))#se', "preg_replace(\$crosslink_word, \$crosslink_url, '\\0')", 'µ' . $message . '§'), 1, -1));
Here you also see that it takes target and replaces it with Target and leaves the url unlinked.
Bild

After:
With codeline
$message = str_replace('"', '"', substr(preg_replace('#(\µ(((?>([^µ§]+|(?R)))*)\§))#si', "preg_replace(\$crosslink_word, \$crosslink_url, '\\0')", 'µ' . $message . '§'), 1, -1));
Bild

Same thing happens in viewtopic when i do the change there:

Before change with codeline
$message = str_replace('"', '"', substr(preg_replace('#(\µ(((?>([^µ§]+|(?R)))*)\§))#se', "preg_replace(\$quicklink_keyword, \$quicklink_lex_url, '\\0')", 'µ' . $message . '§'), 1, -1));
Bild

After change with codeline
$message = str_replace('"', '"', substr(preg_replace('#(\µ(((?>([^µ§]+|(?R)))*)\§))#si', "preg_replace(\$quicklink_keyword, \$quicklink_lex_url, '\\0')", 'µ' . $message . '§'), 1, -1));
Here it does NOT take the target as a lexicon word while there sure is a target in the url when i look at the source in my browser.
Bild
Benutzeravatar
wicher
User
 
Beiträge: 32
Registriert: 9. Feb 2006 01:11
Wohnort: Netherlands

Beitragvon AmigaLink » 13. Mär 2006 20:59

when i change that e to an i it gets crumbled up things.

Dont know why that is.
That is what I mean at all the time. You can not change the e to an i! By doing that, you switch of the case sesitive funktion and this do not solve your problem with the target-tag.
It is interesting that the change of e to i crashes the cache-funktion. :shock: But it is uninteresting for you. ;)

I think you have a bug in your BBCodes.
Take a look at your bbcode_body.tpl. There is a line like
Code: Alles auswählen
<!-- BEGIN url --><a href="rlink/rlink.php?url={URL}" target="_blank" class="postlink">{DESCRIPTION}</a><!-- END url -->
Is there target written as Target???
Or any other mistake?

Zugefügt nach 6 Minute(n):

Ouch - I'll take a new look at your first post now.
Please change the h**p://www.degulden.nl/ to h**p://www.degulden.nl (without the backslash at the end) and look what happens.
Die deutsche Sprache ist Freeware, du kannst sie benutzen, ohne dafür zu bezahlen. Sie ist aber nicht Open Source, also darfst du sie nicht verändern, wie es dir gerade passt.
Benutzeravatar
AmigaLink
Administrator
 
Beiträge: 3987
Registriert: 11. Aug 2004 01:06
Wohnort: NRW

Beitragvon wicher » 13. Mär 2006 21:19

I dont see any mistake there, nut maybe you do.

this is whats in my bbcode.tpl what concerns the url tags:
Code: Alles auswählen
<!-- BEGIN url --><a href="rlink/rlink.php?url={URL}" target="_blank">{DESCRIPTION}</a><!-- END url -->
<!-- BEGIN url_local --><a href="{URL}" target="_self">{DESCRIPTION}</a><!-- END url_local -->


and here my full bbcode.php:
I cant find a wrong in it, but then again, maybe you can.
ps. dont mind if you see bbcode code wrong, i did that because else i could not post it in a code block here.
Code: Alles auswählen
<?php
/***************************************************************************
*                              bbcode.php
*                            -------------------
*   begin                : Saturday, Feb 13, 2001
*   copyright            : (C) 2001 The phpBB Group
*   email                : support@phpbb.com
*
*   $Id: bbcode.php,v 1.36.2.33 2005/05/07 22:18:10 acydburn Exp $
*
***************************************************************************/

/***************************************************************************
*
*   This program is free software; you can redistribute it and/or modify
*   it under the terms of the GNU General Public License as published by
*   the Free Software Foundation; either version 2 of the License, or
*   (at your option) any later version.
*
***************************************************************************/

if ( !defined('IN_PHPBB') )
{
   die("Hacking attempt");
}

define("BBCODE_UID_LEN", 10);

// global that holds loaded-and-prepared bbcode templates, so we only have to do
// that stuff once.

$bbcode_tpl = null;
// MULTI BBCODE-begin
function Multi_BBCode()
{
   global $template, $lang;

   // DO NOT CHANGE THIS ARRAY
   $hotkeys = array('', 'd', 'e', 'g', 'h', 'j', 'k', 'm', 'n', 'r', 't', 'v', 'x', 'y', 'z', '1', '2', '3', '4', '5', '6', '7', '8', '9', '0');

   //NOTE: the first element of each array must be ''   Add new elements AFTER the ''
   $EMBB_widths = array('') ;
   $EMBB_values = array('') ;
   for ($i=1; $i<count($EMBB_values); $i++)
   {
      // load BBcode MODs info
      $val = ($i*2)+16 ;
      $help_lang = ( !empty($lang['bbcode_help'][(strtolower($EMBB_values[$i]))]) ) ? $lang['bbcode_help'][(strtolower($EMBB_values[$i]))] : $lang['bbcode_help'][$EMBB_values[$i]];
      $template->assign_block_vars('MultiBB', array(
         'KEY' => $hotkeys[$i],
         'NAME' => "addbbcode$val",
         'HELP' => sprintf($help_lang, $hotkeys[$i]),
         'WIDTH' => $EMBB_widths[$i],
         'VALUE' => $EMBB_values[$i],
         'STYLE' => "bbstyle($val)")
      );
   }
}
// MULTI BBCODE-end

/**
* Loads bbcode templates from the bbcode.tpl file of the current template set.
* Creates an array, keys are bbcode names like "b_open" or "url", values
* are the associated template.
* Probably pukes all over the place if there's something really screwed
* with the bbcode.tpl file.
*
* Nathan Codding, Sept 26 2001.
*/
function load_bbcode_template()
{
   global $template;
   $tpl_filename = $template->make_filename('bbcode.tpl');
   $tpl = fread(fopen($tpl_filename, 'r'), filesize($tpl_filename));

   // replace \ with \\ and then ' with \'.
   $tpl = str_replace('\\', '\\\\', $tpl);
   $tpl  = str_replace('\'', '\\\'', $tpl);

   // strip newlines.
   $tpl  = str_replace("\n", '', $tpl);

   // Turn template blocks into PHP assignment statements for the values of $bbcode_tpls..
   $tpl = preg_replace('#<!-- BEGIN (.*?) -->(.*?)<!-- END (.*?) -->#', "\n" . '$bbcode_tpls[\'\\1\'] = \'\\2\';', $tpl);

   $bbcode_tpls = array();

   eval($tpl);

   return $bbcode_tpls;
}


/**
* Prepares the loaded bbcode templates for insertion into preg_replace()
* or str_replace() calls in the bbencode_second_pass functions. This
* means replacing template placeholders with the appropriate preg backrefs
* or with language vars. NOTE: If you change how the regexps work in
* bbencode_second_pass(), you MUST change this function.
*
* Nathan Codding, Sept 26 2001
*
*/
function prepare_bbcode_template($bbcode_tpl)
{
   global $lang;

   $bbcode_tpl['olist_open'] = str_replace('{LIST_TYPE}', '\\1', $bbcode_tpl['olist_open']);

   $bbcode_tpl['color_open'] = str_replace('{COLOR}', '\\1', $bbcode_tpl['color_open']);

   $bbcode_tpl['size_open'] = str_replace('{SIZE}', '\\1', $bbcode_tpl['size_open']);

   $bbcode_tpl['quote_open'] = str_replace('{L_QUOTE}', $lang['Quote'], $bbcode_tpl['quote_open']);

   $bbcode_tpl['quote_username_open'] = str_replace('{L_QUOTE}', $lang['Quote'], $bbcode_tpl['quote_username_open']);
   $bbcode_tpl['quote_username_open'] = str_replace('{L_WROTE}', $lang['wrote'], $bbcode_tpl['quote_username_open']);
   $bbcode_tpl['quote_username_open'] = str_replace('{USERNAME}', '\\1', $bbcode_tpl['quote_username_open']);

   $bbcode_tpl['code_open'] = str_replace('{L_CODE}', $lang['Code'], $bbcode_tpl['code_open']);

   $bbcode_tpl['img'] = str_replace('{URL}', '\\1', $bbcode_tpl['img']);

   $bbcode_tpl['afb'] = str_replace('{URL}', '\\1', $bbcode_tpl['afb']);

// LEFT-RIGHT-start
   $bbcode_tpl['left'] = str_replace('{URL}', '\\1', $bbcode_tpl['left']);
   $bbcode_tpl['right'] = str_replace('{URL}', '\\1', $bbcode_tpl['right']);
// LEFT-RIGHT-end

    // MOD LOCAL URL BEGIN
   $bbcode_tpl['url_local1'] = str_replace('{URL}', '\\1\\2\\3', $bbcode_tpl['url_local']);
   $bbcode_tpl['url_local1'] = str_replace('{DESCRIPTION}', '\\1\\2\\3', $bbcode_tpl['url_local1']);

   $bbcode_tpl['url_local2'] = str_replace('{URL}', 'http://\\1\\2', $bbcode_tpl['url_local']);
   $bbcode_tpl['url_local2'] = str_replace('{DESCRIPTION}', '\\1\\2', $bbcode_tpl['url_local2']);

   $bbcode_tpl['url_local3'] = str_replace('{URL}', '\\1\\2\\3', $bbcode_tpl['url_local']);
   $bbcode_tpl['url_local3'] = str_replace('{DESCRIPTION}', '\\4', $bbcode_tpl['url_local3']);
   
   $bbcode_tpl['url_local4'] = str_replace('{URL}', 'http://\\1\\2', $bbcode_tpl['url_local']);
   $bbcode_tpl['url_local4'] = str_replace('{DESCRIPTION}', '\\3', $bbcode_tpl['url_local4']);
    // MOD LOCAL URL END

   // We do URLs in several different ways..
   $bbcode_tpl['url1'] = str_replace('{URL}', '\\1', $bbcode_tpl['url']);
   $bbcode_tpl['url1'] = str_replace('{DESCRIPTION}', '\\1', $bbcode_tpl['url1']);

   $bbcode_tpl['url2'] = str_replace('{URL}', 'http://\\1', $bbcode_tpl['url']);
   $bbcode_tpl['url2'] = str_replace('{DESCRIPTION}', '\\1', $bbcode_tpl['url2']);

   $bbcode_tpl['url3'] = str_replace('{URL}', '\\1', $bbcode_tpl['url']);
   $bbcode_tpl['url3'] = str_replace('{DESCRIPTION}', '\\2', $bbcode_tpl['url3']);

   $bbcode_tpl['url4'] = str_replace('{URL}', 'http://\\1', $bbcode_tpl['url']);
   $bbcode_tpl['url4'] = str_replace('{DESCRIPTION}', '\\3', $bbcode_tpl['url4']);


   $bbcode_tpl['email'] = str_replace('{EMAIL}', '\\1', $bbcode_tpl['email']);

global $userdata;
$uname = $userdata['username'];
$lenght = strlen($uname);
$pos = 0;
while ($lenght > 0)
{
$letter = substr($uname,$pos,1);
if ($letter == ' ')
{
  $letter = '_';
}
$ok_name = $ok_name.$letter;
$lenght = $lenght-1;
$pos = $pos+1;
}
  $bbcode_tpl['you'] = str_replace('{YOU}', $ok_name, $bbcode_tpl['you']);

   define("BBCODE_TPL_READY", true);

   return $bbcode_tpl;
}




/**
* Does second-pass bbencoding. This should be used before displaying the message in
* a thread. Assumes the message is already first-pass encoded, and we are given the
* correct UID as used in first-pass encoding.
*/
function bbencode_second_pass($text, $uid)
{
   global $lang, $bbcode_tpl, $userdata, $phpEx, $u_login_logout;

   // The thing we replace links with. I like using a quote like box
   $replacer = '<table width="40%" cellspacing="1" cellpadding="3" border="0"><tr><td class="nolinkshow">';
   $replacer .= $lang['Links_Allowed_For_Registered_Only'] . '<br />';
   $replacer .= sprintf($lang['Get_Registered'], "<a href=\"" . append_sid('profile.' . $phpEx . '?mode=register') . "\">", "</a>");
   $replacer .= sprintf($lang['Enter_Forum'], "<a href=\"" . append_sid($u_login_logout) . "\">", "</a>");
   $replacer .= '</td></tr></table>';

   $text = preg_replace('#(script|about|applet|activex|chrome):#is', "\\1:", $text);

   // pad it with a space so we can distinguish between FALSE and matching the 1st char (index 0).
   // This is important; bbencode_quote(), bbencode_list(), and bbencode_code() all depend on it.
   $text = " " . $text;

   // First: If there isn't a "[" and a "]" in the message, don't bother.
   if (! (strpos($text, "[") && strpos($text, "]")) )
   {
      // Remove padding, return.
      $text = substr($text, 1);
      return $text;
   }

   // Only load the templates ONCE..
   if (!defined("BBCODE_TPL_READY"))
   {
      // load templates from file into array.
      $bbcode_tpl = load_bbcode_template();

      // prepare array for use in regexps.
      $bbcode_tpl = prepare_bbcode_template($bbcode_tpl);
   }

   // [CO DE] and [/CO DE] for posting code (HTML, PHP, C etc etc) in your posts.
   $text = bbencode_second_pass_code($text, $uid, $bbcode_tpl);

   // [QUOTE] and [/QUOTE] for posting replies with quote, or just for quoting stuff.
   $text = str_replace("[quote:$uid]", $bbcode_tpl['quote_open'], $text);
   $text = str_replace("[/quote:$uid]", $bbcode_tpl['quote_close'], $text);

   // New one liner to deal with opening quotes with usernames...
   // replaces the two line version that I had here before..
   $text = preg_replace("/\[quote:$uid=\"(.*?)\"\]/si", $bbcode_tpl['quote_username_open'], $text);

   // [list] and [list=x] for (un)ordered lists.
   // unordered lists
   $text = str_replace("[list:$uid]", $bbcode_tpl['ulist_open'], $text);
   // li tags
   $text = str_replace("[*:$uid]", $bbcode_tpl['listitem'], $text);
   // ending tags
   $text = str_replace("[/list:u:$uid]", $bbcode_tpl['ulist_close'], $text);
   $text = str_replace("[/list:o:$uid]", $bbcode_tpl['olist_close'], $text);
   // Ordered lists
   $text = preg_replace("/\[list=([a1]):$uid\]/si", $bbcode_tpl['olist_open'], $text);

   // colours
   $text = preg_replace("/\[color=(\#[0-9A-F]{6}|[a-z]+):$uid\]/si", $bbcode_tpl['color_open'], $text);
   $text = str_replace("[/color:$uid]", $bbcode_tpl['color_close'], $text);

   // size
   $text = preg_replace("/\[size=([1-2]?[0-9]):$uid\]/si", $bbcode_tpl['size_open'], $text);
   $text = str_replace("[/size:$uid]", $bbcode_tpl['size_close'], $text);

   // [b] and [/b] for bolding text.
   $text = str_replace("[b:$uid]", $bbcode_tpl['b_open'], $text);
   $text = str_replace("[/b:$uid]", $bbcode_tpl['b_close'], $text);

   // [u] and [/u] for underlining text.
   $text = str_replace("[u:$uid]", $bbcode_tpl['u_open'], $text);
   $text = str_replace("[/u:$uid]", $bbcode_tpl['u_close'], $text);

   // [i] and [/i] for italicizing text.
   $text = str_replace("[i:$uid]", $bbcode_tpl['i_open'], $text);
   $text = str_replace("[/i:$uid]", $bbcode_tpl['i_close'], $text);

   // Patterns and replacements for URL and email tags..
   $patterns = array();
   $replacements = array();

    // MOD LOCAL URL BEGIN
    // do any local urls first...
    // [url]xxxx://www.phpbb.com[/url] code..
   $local_patterns[1] = "#\[url\]([a-z]+?://){1}(".$_SERVER["SERVER_NAME"].")([a-z0-9\-\.,\?!%\*_\#:;~\\&$@\/=\+]*)\[/url\]#si";
   $local_replacements[1] = $bbcode_tpl['url_local1'];                       

   // [url]www.phpbb.com[/url] code.. (no xxxx:// prefix).
   $local_patterns[2] = "#\[url\](".$_SERVER["SERVER_NAME"].")([a-z0-9\-\.,\?!%\*_\#:;~\\&$@\/=\+]*)\[/url\]#si";
   $local_replacements[2] = $bbcode_tpl['url_local2'];

   // [url=xxxx://www.phpbb.com]phpBB[/url] code..
   $local_patterns[3] = "#\[url=([a-z]+?://){1}(".$_SERVER["SERVER_NAME"].")([a-z0-9\-\.,\?!%\*_\#:;~\\&$@\/=\+]*)\](.*?)\[/url\]#si";
   $local_replacements[3] = $bbcode_tpl['url_local3'];

   // [url=www.phpbb.com]phpBB[/url] code.. (no xxxx:// prefix).
   $local_patterns[4] = "#\[url=(".$_SERVER["SERVER_NAME"].")([a-z0-9\-\.,\?!%\*_\#:;~\\&$@\/=\+]*)\](.*?)\[/url\]#si";
   $local_replacements[4] = $bbcode_tpl['url_local4'];
   
    $text = preg_replace($local_patterns, $local_replacements, $text);
    // now with the local urls done, it's safe to do any external urls
    // MOD LOCAL URL END

   // [img]image_url_here[/img] code..
   // This one gets first-passed..
   $patterns[] = "#\[img:$uid\]([^?].*?)\[/img:$uid\]#i";
   $replacements[] = $bbcode_tpl['img'];
   $patterns[] = "#\[afb:$uid\]([^?].*?)\[/afb:$uid\]#i";
   $replacements[] = $bbcode_tpl['img'];

// LEFT-RIGHT-start
   // [img=left]image_url_here[/img] code..
   $patterns[] = "#\[img=left:$uid\](.*?)\[/img:$uid\]#si";
   $replacements[] = $bbcode_tpl['left'];

   // [img=right]image_url_here[/img] code..
   $patterns[] = "#\[img=right:$uid\](.*?)\[/img:$uid\]#si";
   $replacements[] = $bbcode_tpl['right'];
// LEFT-RIGHT-end

   // matches a [url]xxxx://www.phpbb.com[/url] code..
   $patterns[] = "#\[url\]([\w]+?://([\w\#$%&~/.\-;:=,?@\]+]|\[(?!url=))*?)\[/url\]#is";
   if ( !$userdata['session_logged_in'] )
   {
      $replacements[] = $replacer;
   }
   else
   {
      $replacements[] = $bbcode_tpl['url1'];
   }

   // [url]www.phpbb.com[/url] code.. (no xxxx:// prefix).
   $patterns[] = "#\[url\]((www|ftp)\.([\w\#$%&~/.\-;:=,?@\]+]|\[(?!url=))*?)\[/url\]#is";
   if ( !$userdata['session_logged_in'] )
   {
      $replacements[] = $replacer;
   }
   else
   {
      $replacements[] = $bbcode_tpl['url2'];
   }

   // [url=xxxx://www.phpbb.com]phpBB[/url] code..
   $patterns[] = "#\[url=([\w]+?://[\w\#$%&~/.\-;:=,?@\[\]+]*?)\]([^?\n\r\t].*?)\[/url\]#is";
   if ( !$userdata['session_logged_in'] )
   {
      $replacements[] = $replacer;
   }
   else
   {
      $replacements[] = $bbcode_tpl['url3'];
   }

   // [url=www.phpbb.com]phpBB[/url] code.. (no xxxx:// prefix).
   $patterns[] = "#\[url=((www|ftp)\.[\w\#$%&~/.\-;:=,?@\[\]+]*?)\]([^?\n\r\t].*?)\[/url\]#is";
   if ( !$userdata['session_logged_in'] )
   {
      $replacements[] = $replacer;
   }
   else
   {
      $replacements[] = $bbcode_tpl['url4'];
   }

   // [email]user@domain.tld[/email] code..
   $patterns[] = "#\[email\]([a-z0-9&\-_.]+?@[\w\-]+\.([\w\-\.]+\.)?[\w]+)\[/email\]#si";
   if ( !$userdata['session_logged_in'] )
   {
      $replacements[] = $replacer;
   }
   else
   {
      $replacements[] = $bbcode_tpl['email'];
   }

   // [you] - inserts the name of the person viewing the post
   $patterns[] = "#\[you\]#ise";
   $replacements[] = $bbcode_tpl['you'];


   $text = preg_replace($patterns, $replacements, $text);

   // Remove our padding from the string..
   $text = substr($text, 1);

   return $text;

} // bbencode_second_pass()

// Need to initialize the random numbers only ONCE
mt_srand( (double) microtime() * 1000000);

function make_bbcode_uid()
{
   // Unique ID for this message..

   $uid = md5(mt_rand());
   $uid = substr($uid, 0, BBCODE_UID_LEN);

   return $uid;
}

function bbencode_first_pass($text, $uid)
{
   // pad it with a space so we can distinguish between FALSE and matching the 1st char (index 0).
   // This is important; bbencode_quote(), bbencode_list(), and bbencode_code() all depend on it.
   $text = " " . $text;

   // [CO DE] and [/CO DE] for posting code (HTML, PHP, C etc etc) in your posts.
   $text = bbencode_first_pass_pda($text, $uid, '[co de]', '[/co de]', '', true, '');

   // [QUOTE] and [/QUOTE] for posting replies with quote, or just for quoting stuff.
   $text = bbencode_first_pass_pda($text, $uid, '[quote]', '[/quote]', '', false, '');
   $text = bbencode_first_pass_pda($text, $uid, '/\[quote=\\\\&quot;(.*?)\\\\&quot;\]/is', '[/quote]', '', false, '', "[quote:$uid=\\\"\\1\\\"]");

   // [list] and [list=x] for (un)ordered lists.
   $open_tag = array();
   $open_tag[0] = "[list]";

   // unordered..
   $text = bbencode_first_pass_pda($text, $uid, $open_tag, "[/list]", "[/list:u]", false, 'replace_listitems');

   $open_tag[0] = "[list=1]";
   $open_tag[1] = "[list=a]";

   // ordered.
   $text = bbencode_first_pass_pda($text, $uid, $open_tag, "[/list]", "[/list:o]",  false, 'replace_listitems');

   // [color] and [/color] for setting text color
   $text = preg_replace("#\[color=(\#[0-9A-F]{6}|[a-z\-]+)\](.*?)\[/color\]#si", "[color=\\1:$uid]\\2[/color:$uid]", $text);

   // [size] and [/size] for setting text size
   $text = preg_replace("#\[size=([1-2]?[0-9])\](.*?)\[/size\]#si", "[size=\\1:$uid]\\2[/size:$uid]", $text);

   // [b] and [/b] for bolding text.
   $text = preg_replace("#\[b\](.*?)\[/b\]#si", "[b:$uid]\\1[/b:$uid]", $text);

   // [u] and [/u] for underlining text.
   $text = preg_replace("#\[u\](.*?)\[/u\]#si", "[u:$uid]\\1[/u:$uid]", $text);

   // [i] and [/i] for italicizing text.
   $text = preg_replace("#\[i\](.*?)\[/i\]#si", "[i:$uid]\\1[/i:$uid]", $text);

   // [img]image_url_here[/img] code..
   $text = preg_replace("#\[img\]((http|ftp|https|ftps)://)([^ \?&=\#\"\n\r\t<]*?(\.(jpg|jpeg|gif|png)))\[/img\]#sie", "'[img:$uid]\\1' . str_replace(' ', '%20', '\\3') . '[/img:$uid]'", $text);

   // [afb]image_url_here[/afb] code..
   $text = preg_replace("#\[afb\]((http|ftp|https|ftps)://)([^ \?&=\#\"\n\r\t<]*?(\.(jpg|jpeg|gif|png)))\[/afb\]#sie", "'[afb:$uid]\\1' . str_replace(' ', '%20', '\\3') . '[/afb:$uid]'", $text);

// LEFT-RIGHT-start
$text = preg_replace("#\[img=left\]((ht|f)tp://)([^\r\n\t<\"]*?)\[/img\]#sie", "'[img=left:$uid]\\1' . str_replace(' ', '%20', '\\3') . '[/img:$uid]'", $text);
$text = preg_replace("#\[img=right\]((ht|f)tp://)([^\r\n\t<\"]*?)\[/img\]#sie", "'[img=right:$uid]\\1' . str_replace(' ', '%20', '\\3') . '[/img:$uid]'", $text);
// LEFT-RIGHT-end

   // Remove our padding from the string..
   return substr($text, 1);;

} // bbencode_first_pass()

/**
* $text - The text to operate on.
* $uid - The UID to add to matching tags.
* $open_tag - The opening tag to match. Can be an array of opening tags.
* $close_tag - The closing tag to match.
* $close_tag_new - The closing tag to replace with.
* $mark_lowest_level - boolean - should we specially mark the tags that occur
*                at the lowest level of nesting? (useful for [co de], because
*                  we need to match these tags first and transform HTML tags
*                  in their contents..
* $func - This variable should contain a string that is the name of a function.
*            That function will be called when a match is found, and passed 2
*            parameters: ($text, $uid). The function should return a string.
*            This is used when some transformation needs to be applied to the
*            text INSIDE a pair of matching tags. If this variable is FALSE or the
*            empty string, it will not be executed.
* If open_tag is an array, then the pda will try to match pairs consisting of
* any element of open_tag followed by close_tag. This allows us to match things
* like [list=A]...[/list] and [list=1]...[/list] in one pass of the PDA.
*
* NOTES:   - this function assumes the first character of $text is a space.
*            - every opening tag and closing tag must be of the [...] format.
*/
function bbencode_first_pass_pda($text, $uid, $open_tag, $close_tag, $close_tag_new, $mark_lowest_level, $func, $open_regexp_replace = false)
{
   $open_tag_count = 0;

   if (!$close_tag_new || ($close_tag_new == ''))
   {
      $close_tag_new = $close_tag;
   }

   $close_tag_length = strlen($close_tag);
   $close_tag_new_length = strlen($close_tag_new);
   $uid_length = strlen($uid);

   $use_function_pointer = ($func && ($func != ''));

   $stack = array();

   if (is_array($open_tag))
   {
      if (0 == count($open_tag))
      {
         // No opening tags to match, so return.
         return $text;
      }
      $open_tag_count = count($open_tag);
   }
   else
   {
      // only one opening tag. make it into a 1-element array.
      $open_tag_temp = $open_tag;
      $open_tag = array();
      $open_tag[0] = $open_tag_temp;
      $open_tag_count = 1;
   }

   $open_is_regexp = false;

   if ($open_regexp_replace)
   {
      $open_is_regexp = true;
      if (!is_array($open_regexp_replace))
      {
         $open_regexp_temp = $open_regexp_replace;
         $open_regexp_replace = array();
         $open_regexp_replace[0] = $open_regexp_temp;
      }
   }

   if ($mark_lowest_level && $open_is_regexp)
   {
      message_die(GENERAL_ERROR, "Unsupported operation for bbcode_first_pass_pda().");
   }

   // Start at the 2nd char of the string, looking for opening tags.
   $curr_pos = 1;
   while ($curr_pos && ($curr_pos < strlen($text)))
   {
      $curr_pos = strpos($text, "[", $curr_pos);

      // If not found, $curr_pos will be 0, and the loop will end.
      if ($curr_pos)
      {
         // We found a [. It starts at $curr_pos.
         // check if it's a starting or ending tag.
         $found_start = false;
         $which_start_tag = "";
         $start_tag_index = -1;

         for ($i = 0; $i < $open_tag_count; $i++)
         {
            // Grab everything until the first "]"...
            $possible_start = substr($text, $curr_pos, strpos($text, ']', $curr_pos + 1) - $curr_pos + 1);

            //
            // We're going to try and catch usernames with "[' characters.
            //
            if( preg_match('#\[quote=\\\&quot;#si', $possible_start, $match) && !preg_match('#\[quote=\\\&quot;(.*?)\\\&quot;\]#si', $possible_start) )
            {
               // OK we are in a quote tag that probably contains a ] bracket.
               // Grab a bit more of the string to hopefully get all of it..
               if ($close_pos = strpos($text, '&quot;]', $curr_pos + 14))
               {
                  if (strpos(substr($text, $curr_pos + 14, $close_pos - ($curr_pos + 14)), '[quote') === false)
                  {
                     $possible_start = substr($text, $curr_pos, $close_pos - $curr_pos + 7);
                  }
               }
            }

            // Now compare, either using regexp or not.
            if ($open_is_regexp)
            {
               $match_result = array();
               if (preg_match($open_tag[$i], $possible_start, $match_result))
               {
                  $found_start = true;
                  $which_start_tag = $match_result[0];
                  $start_tag_index = $i;
                  break;
               }
            }
            else
            {
               // straightforward string comparison.
               if (0 == strcasecmp($open_tag[$i], $possible_start))
               {
                  $found_start = true;
                  $which_start_tag = $open_tag[$i];
                  $start_tag_index = $i;
                  break;
               }
            }
         }

         if ($found_start)
         {
            // We have an opening tag.
            // Push its position, the text we matched, and its index in the open_tag array on to the stack, and then keep going to the right.
            $match = array("pos" => $curr_pos, "tag" => $which_start_tag, "index" => $start_tag_index);
            array_push($stack, $match);
            //
            // Rather than just increment $curr_pos
            // Set it to the ending of the tag we just found
            // Keeps error in nested tag from breaking out
            // of table structure..
            //
            $curr_pos += strlen($possible_start);
         }
         else
         {
            // check for a closing tag..
            $possible_end = substr($text, $curr_pos, $close_tag_length);
            if (0 == strcasecmp($close_tag, $possible_end))
            {
               // We have an ending tag.
               // Check if we've already found a matching starting tag.
               if (sizeof($stack) > 0)
               {
                  // There exists a starting tag.
                  $curr_nesting_depth = sizeof($stack);
                  // We need to do 2 replacements now.
                  $match = array_pop($stack);
                  $start_index = $match['pos'];
                  $start_tag = $match['tag'];
                  $start_length = strlen($start_tag);
                  $start_tag_index = $match['index'];

                  if ($open_is_regexp)
                  {
                     $start_tag = preg_replace($open_tag[$start_tag_index], $open_regexp_replace[$start_tag_index], $start_tag);
                  }

                  // everything before the opening tag.
                  $before_start_tag = substr($text, 0, $start_index);

                  // everything after the opening tag, but before the closing tag.
                  $between_tags = substr($text, $start_index + $start_length, $curr_pos - $start_index - $start_length);

                  // Run the given function on the text between the tags..
                  if ($use_function_pointer)
                  {
                     $between_tags = $func($between_tags, $uid);
                  }

                  // everything after the closing tag.
                  $after_end_tag = substr($text, $curr_pos + $close_tag_length);

                  // Mark the lowest nesting level if needed.
                  if ($mark_lowest_level && ($curr_nesting_depth == 1))
                  {
                     if ($open_tag[0] == '[co de]')
                     {
                        $code_entities_match = array('#<#', '#>#', '#"#', '#:#', '#\[#', '#\]#', '#\(#', '#\)#', '#\{#', '#\}#');
                        $code_entities_replace = array('&lt;', '&gt;', '&quot;', ':', '[', ']', '(', ')', '{', '}');
                        $between_tags = preg_replace($code_entities_match, $code_entities_replace, $between_tags);
                     }
                     $text = $before_start_tag . substr($start_tag, 0, $start_length - 1) . ":$curr_nesting_depth:$uid]";
                     $text .= $between_tags . substr($close_tag_new, 0, $close_tag_new_length - 1) . ":$curr_nesting_depth:$uid]";
                  }
                  else
                  {
                     if ($open_tag[0] == '[co de]')
                     {
                        $text = $before_start_tag . '[code]';
                        $text .= $between_tags . '[/code]';
                     }
                     else
                     {
                        if ($open_is_regexp)
                        {
                           $text = $before_start_tag . $start_tag;
                        }
                        else
                        {
                           $text = $before_start_tag . substr($start_tag, 0, $start_length - 1) . ":$uid]";
                        }
                        $text .= $between_tags . substr($close_tag_new, 0, $close_tag_new_length - 1) . ":$uid]";
                     }
                  }

                  $text .= $after_end_tag;

                  // Now.. we've screwed up the indices by changing the length of the string.
                  // So, if there's anything in the stack, we want to resume searching just after it.
                  // otherwise, we go back to the start.
                  if (sizeof($stack) > 0)
                  {
                     $match = array_pop($stack);
                     $curr_pos = $match['pos'];
//                     bbcode_array_push($stack, $match);
//                     ++$curr_pos;
                  }
                  else
                  {
                     $curr_pos = 1;
                  }
               }
               else
               {
                  // No matching start tag found. Increment pos, keep going.
                  ++$curr_pos;
               }
            }
            else
            {
               // No starting tag or ending tag.. Increment pos, keep looping.,
               ++$curr_pos;
            }
         }
      }
   } // while

   return $text;

} // bbencode_first_pass_pda()

/**
* Does second-pass bbencoding of the [co de] tags. This includes
* running htmlspecialchars() over the text contained between
* any pair of [co de] tags that are at the first level of
* nesting. Tags at the first level of nesting are indicated
* by this format: [code:1:$uid] ... [/code:1:$uid]
* Other tags are in this format: [code:$uid] ... [/code:$uid]
*/
function bbencode_second_pass_code($text, $uid, $bbcode_tpl)
{
   global $lang;

   // First, do all the 1st-level matches. These need an htmlspecialchars() run,
   // so they have to be handled differently.
   $match_count = preg_match_all("#\[code:1:$uid\](.*?)\[/code:1:$uid\]#si", $text, $matches);
   $code_start_html = $bbcode_tpl['code_open'];
   $code_end_html =  $bbcode_tpl['code_close'];

   for ($i = 0; $i < $match_count; $i++)
   {
      $tdnumbers = "";
      $before_replace = $matches[1][$i];
      $after_replace = $matches[1][$i];

      $codetemp = fopen('Codenum/codetemp.txt', 'w');
      fwrite($codetemp, $before_replace);
      fclose($codetemp);
      $tempfile = file('Codenum/codetemp.txt');
      foreach ($tempfile as $line_num => $line) {
         // Replace 2 spaces with "&nbsp; " so non-tabbed code indents without making huge long lines.
         $line = str_replace("  ", "&nbsp; ", $line);
         // now Replace 2 spaces with " &nbsp;" to catch odd #s of spaces.
         $line = str_replace("  ", " &nbsp;", $line);
         // Replace tabs with "&nbsp; &nbsp;" so tabbed code indents sorta right without making huge long lines.
         $line = str_replace("\t", "&nbsp; &nbsp;", $line);
         // now Replace space occurring at the beginning of a line
         $line = preg_replace("/^ {1}/m", '&nbsp;', $line);
           if ($line_num >= 0){
         $tdnumbers = $tdnumbers. '<tr><td width="36" background="Codenum/codenum.png?number='.$line_num.'" valign="top"><span class="gensmall"></span></td>  <td valign="top" style="border-left:1px dotted gray;"><span class="gensmall">' . $line . "</span></td></tr>";
         $tdlines = $tdlines . $line . '<br >';
         }
      }

      $str_to_match = "[code:1:$uid]" . $before_replace . "[/code:1:$uid]";

      $replacement = $code_start_html;
      $replacement .= '<table cellpadding="0" cellspacing="0" border="0">'.$tdnumbers.'</table>';
      $replacement .= $code_end_html;

      $text = str_replace($str_to_match, $replacement, $text);
   }

   return $text;

} // bbencode_second_pass_code()

/*
function bbencode_second_pass_code($text, $uid, $bbcode_tpl)
{
   global $lang;

   $code_start_html = $bbcode_tpl['code_open'];
   $code_end_html =  $bbcode_tpl['code_close'];

   // First, do all the 1st-level matches. These need an htmlspecialchars() run,
   // so they have to be handled differently.
   $match_count = preg_match_all("#\[code:1:$uid\](.*?)\[/code:1:$uid\]#si", $text, $matches);

   for ($i = 0; $i < $match_count; $i++)
   {
      $before_replace = $matches[1][$i];
      $after_replace = $matches[1][$i];

      // Replace 2 spaces with "&nbsp; " so non-tabbed code indents without making huge long lines.
      $after_replace = str_replace("  ", "&nbsp; ", $after_replace);
      // now Replace 2 spaces with " &nbsp;" to catch odd #s of spaces.
      $after_replace = str_replace("  ", " &nbsp;", $after_replace);

      // Replace tabs with "&nbsp; &nbsp;" so tabbed code indents sorta right without making huge long lines.
      $after_replace = str_replace("\t", "&nbsp; &nbsp;", $after_replace);

      // now Replace space occurring at the beginning of a line
      $after_replace = preg_replace("/^ {1}/m", '&nbsp;', $after_replace);

      $str_to_match = "[code:1:$uid]" . $before_replace . "[/code:1:$uid]";

      $replacement = $code_start_html;
      $replacement .= $after_replace;
      $replacement .= $code_end_html;

      $text = str_replace($str_to_match, $replacement, $text);
   }

   // Now, do all the non-first-level matches. These are simple.
   $text = str_replace("[code:$uid]", $code_start_html, $text);
   $text = str_replace("[/code:$uid]", $code_end_html, $text);

   return $text;

} // bbencode_second_pass_code()
*/
/**
* Rewritten by Nathan Codding - Feb 6, 2001.
* - Goes through the given string, and replaces xxxx://yyyy with an HTML <a> tag linking
*    to that URL
* - Goes through the given string, and replaces www.xxxx.yyyy[zzzz] with an HTML <a> tag linking
*    to http://www.xxxx.yyyy[/zzzz]
* - Goes through the given string, and replaces xxxx@yyyy with an HTML mailto: tag linking
*      to that email address
* - Only matches these 2 patterns either after a space, or at the beginning of a line
*
* Notes: the email one might get annoying - it's easy to make it more restrictive, though.. maybe
* have it require something like xxxx@yyyy.zzzz or such. We'll see.
*/
function make_clickable($text)
{
   global $userdata, $lang, $phpEx, $u_login_logout;
   $text = preg_replace('#(script|about|applet|activex|chrome):#is', "\\1:", $text);

   // pad it with a space so we can match things at the start of the 1st line.
   $ret = ' ' . $text;

//
// Hide links from unregistered users mod
//
   if ( !$userdata['session_logged_in'] )
   {
      // The thing we replace links with. I like using a quote like box
      $replacer = ' <table width="40%" cellspacing="1" cellpadding="3" border="1"><tr><td class="nolinkshow">';
      $replacer .= $lang['Links_Allowed_For_Registered_Only'] . '<br />';
      $replacer .= sprintf($lang['Get_Registered'], "<a href=\"" . append_sid('profile.' . $phpEx . '?mode=register') . "\">", "</a>");
      $replacer .= sprintf($lang['Enter_Forum'], "<a href=\"" . append_sid($u_login_logout) . "\">", "</a>");
      $replacer .= '</td></tr></table>';

      // matches an "xxxx://yyyy" URL at the start of a line, or after a space.
      // xxxx can only be alpha characters.
      // yyyy is anything up to the first space, newline, comma, double quote or <
      $ret = preg_replace("#(^|[\n ])([\w]+?://[^ \"\n\r\t<]*)#is", $replacer, $ret);

      // matches a "www|ftp.xxxx.yyyy[/zzzz]" kinda lazy URL thing
      // Must contain at least 2 dots. xxxx contains either alphanum, or "-"
      // zzzz is optional.. will contain everything up to the first space, newline,
      // comma, double quote or <.
      $ret = preg_replace("#(^|[\n ])((www|ftp)\.[^ \"\t\n\r<]*)#is", $replacer, $ret);

      // matches an email@domain type address at the start of a line, or after a space.
      // Note: Only the followed chars are valid; alphanums, "-", "_" and or ".".
      $ret = preg_replace("#(^|[\n ])([a-z0-9&\-_.]+?)@([\w\-]+\.([\w\-\.]+\.)*[\w]+)#i", $replacer, $ret);

   }
   else
   {
// MOD LOCAL URL BEGIN
// match a local URL and replace with a target="_self" href
$ret = preg_replace("#([\n ])([a-z]+?)://(".$_SERVER["SERVER_NAME"].")((?:/[^\t <\n\r]*)?)#i", "\\1<a href=\"\\2://\\3\\4\" target=\"_self\">\\2://\\3\\4</a>", $ret);
$ret = preg_replace("#([\n ])(".$_SERVER["SERVER_NAME"].")((?:/[^\t <\n\r]*)?)#i", "\\1<a href=\"http://\\2\\3\" target=\"_self\">\\2\\3</a>", $ret);
// MOD LOCAL URL END

      // matches an "xxxx://yyyy" URL at the start of a line, or after a space.
      // xxxx can only be alpha characters.
      // yyyy is anything up to the first space, newline, comma, double quote or <
//   $ret = preg_replace("#(^|[\n ])([\w]+?://[\w\#$%&~/.\-;:=,?@\[\]+]*)#is", "\\1<a href=\"\\2\" target=\"_blank\">\\2</a>", $ret);
   $ret = preg_replace("#(^|[\n ])([\w]+?://[\w\#$%&~/.\-;:=,?@\[\]+]*)#is", "\\1<a href=\"http://www.detecties.com/dc/rlink/rlink.php?url=\\2\" target=\"_blank\">\\2</a>", $ret);
////$ret = preg_replace("#(^|[\n ])([\w]+?://[^ \"\n\r\t<]*)#is", "\\1<a href=\"http://www.detecties.com/dc/rlink/rlink.php?url=\\2\" target=\"_blank\">\\2</a>", $ret);

   // matches a "www|ftp.xxxx.yyyy[/zzzz]" kinda lazy URL thing
   // Must contain at least 2 dots. xxxx contains either alphanum, or "-"
   // zzzz is optional.. will contain everything up to the first space, newline,
   // comma, double quote or <.
//   $ret = preg_replace("#(^|[\n ])((www|ftp)\.[\w\#$%&~/.\-;:=,?@\[\]+]*)#is", "\\1<a href=\"http://\\2\" target=\"_blank\">\\2</a>", $ret);
   $ret = preg_replace("#(^|[\n ])((www|ftp)\.[\w\#$%&~/.\-;:=,?@\[\]+]*)#is", "\\1<a href=\"http://www.detecties.com/dc/rlink/rlink.php?url=http://\\2\" target=\"_blank\">\\2</a>", $ret);
////$ret = preg_replace("#(^|[\n ])((www|ftp)\.[^ \"\t\n\r<]*)#is", "\\1<a href=\"http://www.detecties.com/dc/rlink/rlink.php?url=http://\\2\" target=\"_blank\">\\2</a>", $ret);


      // matches an email@domain type address at the start of a line, or after a space.
      // Note: Only the followed chars are valid; alphanums, "-", "_" and or ".".
      $ret = preg_replace("#(^|[\n ])([a-z0-9&\-_.]+?)@([\w\-]+\.([\w\-\.]+\.)*[\w]+)#i", "\\1<a href=\"mailto:\\2@\\3\">\\2@\\3</a>", $ret);
   }
//
// Hide links from unregistered users mod
//

   // Remove our padding..
   $ret = substr($ret, 1);

   return($ret);
}

/**
* Nathan Codding - Feb 6, 2001
* Reverses the effects of make_clickable(), for use in editpost.
* - Does not distinguish between "www.xxxx.yyyy" and "http://aaaa.bbbb" type URLs.
*
*/
function undo_make_clickable($text)
{
   $text = preg_replace("#<!-- BBCode auto-link start --><a href=\"(.*?)\" target=\"_blank\">.*?</a><!-- BBCode auto-link end -->#i", "\\1", $text);
   $text = preg_replace("#<!-- BBcode auto-mailto start --><a href=\"mailto:(.*?)\">.*?</a><!-- BBCode auto-mailto end -->#i", "\\1", $text);

   return $text;

}

/**
* Nathan Codding - August 24, 2000.
* Takes a string, and does the reverse of the PHP standard function
* htmlspecialchars().
*/
function undo_htmlspecialchars($input)
{
   $input = preg_replace("/&gt;/i", ">", $input);
   $input = preg_replace("/&lt;/i", "<", $input);
   $input = preg_replace("/&quot;/i", "\"", $input);
   $input = preg_replace("/&amp;/i", "&", $input);

   return $input;
}

/**
* This is used to change a [*] tag into a [*:$uid] tag as part
* of the first-pass bbencoding of [list] tags. It fits the
* standard required in order to be passed as a variable
* function into bbencode_first_pass_pda().
*/
function replace_listitems($text, $uid)
{
   $text = str_replace("[*]", "[*:$uid]", $text);

   return $text;
}

/**
* Escapes the "/" character with "\/". This is useful when you need
* to stick a runtime string into a PREG regexp that is being delimited
* with slashes.
*/
function escape_slashes($input)
{
   $output = str_replace('/', '\/', $input);
   return $output;
}

/**
* This function does exactly what the PHP4 function array_push() does
* however, to keep phpBB compatable with PHP 3 we had to come up with our own
* method of doing it.
* This function was deprecated in phpBB 2.0.18
*/
function bbcode_array_push(&$stack, $value)
{
   $stack[] = $value;
   return(sizeof($stack));
}

/**
* This function does exactly what the PHP4 function array_pop() does
* however, to keep phpBB compatable with PHP 3 we had to come up with our own
* method of doing it.
* This function was deprecated in phpBB 2.0.18
*/
function bbcode_array_pop(&$stack)
{
   $arrSize = count($stack);
   $x = 1;

   while(list($key, $val) = each($stack))
   {
      if($x < count($stack))
      {
          $tmpArr[] = $val;
      }
      else
      {
          $return_val = $val;
      }
      $x++;
   }
   $stack = $tmpArr;

   return($return_val);
}

//
// Smilies code ... would this be better tagged on to the end of bbcode.php?
// Probably so and I'll move it before B2
//
function smilies_pass($message)
{
   static $orig, $repl;

   if (!isset($orig))
   {
      global $db, $board_config;
      $orig = $repl = array();

      $sql = 'SELECT * FROM ' . SMILIES_TABLE;
      if( !$result = $db->sql_query($sql) )
      {
         message_die(GENERAL_ERROR, "Couldn't obtain smilies data", "", __LINE__, __FILE__, $sql);
      }
      $smilies = $db->sql_fetchrowset($result);

      if (count($smilies))
      {
         usort($smilies, 'smiley_sort');
      }

      for ($i = 0; $i < count($smilies); $i++)
      {
         $orig[] = "/(?<=.\W|\W.|^\W)" . preg_quote($smilies[$i]['code'], "/") . "(?=.\W|\W.|\W$)/";
         $repl[] = '<img src="'. $board_config['smilies_path'] . '/' . $smilies[$i]['smile_url'] . '" alt="' . $smilies[$i]['emoticon'] . '" border="0" />';
      }
   }

   if (count($orig))
   {
      $message = preg_replace($orig, $repl, ' ' . $message . ' ');
      $message = substr($message, 1, -1);
   }
   
   return $message;
}

function smiley_sort($a, $b)
{
   if ( strlen($a['code']) == strlen($b['code']) )
   {
      return 0;
   }

   return ( strlen($a['code']) > strlen($b['code']) ) ? -1 : 1;
}

/*
function title_smilies_pass($message)
{
   static $orig, $repl;

   if (!isset($orig))
   {
      global $db, $board_config;
      $orig = $repl = array();

      $sql = 'SELECT * FROM ' . SMILIES_TABLE;
      if( !$result = $db->sql_query($sql) )
      {
         message_die(GENERAL_ERROR, "Couldn't obtain smilies data", "", __LINE__, __FILE__, $sql);
      }
      $smilies = $db->sql_fetchrowset($result);

      for ($i = 0; $i < count($smilies); $i++)
      {
         $orig[] = "/(?<=.\W|\W.|^\W)" . preg_quote($smilies[$i]['code'], "/") . "(?=.\W|\W.|\W$)/";
         $repl[] = '<img src="'. $board_config['smilies_path'] . '/' . $smilies[$i]['smile_url'] . '" border="0" />';
      }
   }

   if (count($orig))
   {
      $message = preg_replace($orig, $repl, ' ' . $message . ' ');
      $message = substr($message, 1, -1);
   }
   
   return $message;
}
*/

?>


Zugefügt nach 12 Minute(n):

Without backslash it still takes out the target as Target, there is no improvement there.

Zugefügt nach 4 Minute(n):

i also tryed without the http:// but also no difference
Benutzeravatar
wicher
User
 
Beiträge: 32
Registriert: 9. Feb 2006 01:11
Wohnort: Netherlands

Nächste

Zurück zu Lexicon v2



Wer ist online?

Mitglieder in diesem Forum: 0 Mitglieder und 10 Gäste

cron