此檔案是來自於
http://www.phpbb2.de/dload.php?action=file&file_id=827
同時也發布在
http://www.gffclan.com/dload.php?action=file&file_id=7
提供下載
代碼: 選擇全部
##############################################################
## MOD Title: phpBB 2.0.20 to phpBB 2.0.21 Code Changes
## MOD Author: Acyd Burn <N> (Meik Sievertsen) N/A
## MOD Description:
##
##
## These are the Changes from phpBB 2.0.20 to phpBB 2.0.21 summed up into a little
## Mod. This might be very helpful if you want to update your Board and have
## installed a bunch of Mods. Then it's normally easier to apply the Code Changes
## than to install all Mods again.
##
## When you find a 'AFTER, ADD'-Statement, the Code have to be added after the
## last line quoted in the 'FIND'-Statement.
## When you find a 'BEFORE, ADD'-Statement, the Code have to be added before the
## first line quoted in the 'FIND'-Statement.
## When you find a 'REPLACE WITH'-Statement, the Code quoted in the
## 'FIND'-Statement have to be replaced completely with the quoted Code in the
## 'REPLACE WITH'-Statement.
##
## When you find more than one 'FIND'-Statement it just means that you go down the
## code within the order of the 'FIND'-Statements, if you found the lines for the
## first 'FIND'-Statement, you continue to search the lines for the second
## 'FIND'-Statement. The last 'FIND'-Statement includes the codeblock to work
## with.
##
## For a comprehensive explanation about installing MODs, please visit this url:
## http://www.phpbb.com/kb/article.php?article_id=150
##
## After you have finished this tutorial, you have to upload the
## install/update_to_latest.php file, execute it and then delete it from your
## webspace.
##
##
##
## MOD Version: 1.0.0
##
## Installation Level: Easy
## Installation Time: 45 Minutes
## Files To Edit:
## admin/admin_ranks.php
## admin/admin_smilies.php
## admin/admin_styles.php
## admin/admin_words.php
## common.php
## includes/functions.php
## includes/functions_post.php
## includes/sessions.php
## includes/usercp_avatar.php
## login.php
## privmsg.php
## profile.php
## search.php
## viewtopic.php
##
## Included Files: install/update_to_latest.php
## License: http://opensource.org/licenses/gpl-license.php GNU General Public License v2
##############################################################
## For security purposes, please check: http://www.phpbb.com/mods/
## for the latest version of this MOD. Although MODs are checked
## before being allowed in the MODs Database there is no guarantee
## that there are no security problems within the MOD. No support
## will be given for MODs not found within the MODs Database which
## can be found at http://www.phpbb.com/mods/
##############################################################
## Author Notes:
##
##
##############################################################
## MOD History:
##
## 2006-06-01 - Version 1.0.0
## - first release
##
##############################################################
## Before Adding This MOD To Your Forum, You Should Back Up All Files Related To This MOD
############################################################## 代碼: 選擇全部
將/install/ 資料夾上傳到你的論壇的根目錄下
並在你的瀏覽器上啟動install/update_to_latest.php
比如http://www.yourforum.com/install/update_to_latest.php#-----[ OPEN ]---------------------------------------------
#
代碼: 選擇全部
admin/admin_ranks.php#-----[ FIND ]---------------------------------------------
# Line 33
代碼: 選擇全部
//
$phpbb_root_path = "./../";
require($phpbb_root_path . 'extension.inc');#-----[ AFTER, ADD ]---------------------------------------------
#
代碼: 選擇全部
$cancel = ( isset($HTTP_POST_VARS['cancel']) ) ? true : false;
$no_page_header = $cancel;#-----[ FIND ]---------------------------------------------
# Line 39
代碼: 選擇全部
require('./pagestart.' . $phpEx);#-----[ AFTER, ADD ]---------------------------------------------
#
代碼: 選擇全部
if ($cancel)
{
redirect('admin/' . append_sid("admin_ranks.$phpEx", true));
}#-----[ OPEN ]---------------------------------------------
#
代碼: 選擇全部
admin/admin_smilies.php#-----[ FIND ]---------------------------------------------
# Line 50
代碼: 選擇全部
$phpbb_root_path = "./../";
require($phpbb_root_path . 'extension.inc');#-----[ AFTER, ADD ]---------------------------------------------
#
代碼: 選擇全部
$cancel = ( isset($HTTP_POST_VARS['cancel']) ) ? true : false;
$no_page_header = $cancel;#-----[ FIND ]---------------------------------------------
# Line 55
代碼: 選擇全部
require('./pagestart.' . $phpEx);#-----[ AFTER, ADD ]---------------------------------------------
#
代碼: 選擇全部
if ($cancel)
{
redirect('admin/' . append_sid("admin_smilies.$phpEx", true));
}#-----[ OPEN ]---------------------------------------------
#
代碼: 選擇全部
admin/admin_styles.php#-----[ FIND ]---------------------------------------------
# Line 838
代碼: 選擇全部
$template->set_filenames(array(
"confirm" => "confirm_body.tpl")
);#-----[ REPLACE WITH ]---------------------------------------------
#
代碼: 選擇全部
$template->set_filenames(array(
"confirm" => "admin/confirm_body.tpl")
);#-----[ OPEN ]---------------------------------------------
#
代碼: 選擇全部
admin/admin_words.php#-----[ FIND ]---------------------------------------------
# Line 35
代碼: 選擇全部
$phpbb_root_path = "./../";
require($phpbb_root_path . 'extension.inc');#-----[ AFTER, ADD ]---------------------------------------------
#
代碼: 選擇全部
$cancel = ( isset($HTTP_POST_VARS['cancel']) ) ? true : false;
$no_page_header = $cancel;#-----[ FIND ]---------------------------------------------
# Line 40
代碼: 選擇全部
require('./pagestart.' . $phpEx);#-----[ AFTER, ADD ]---------------------------------------------
#
代碼: 選擇全部
if ($cancel)
{
redirect('admin/' . append_sid("admin_words.$phpEx", true));
}#-----[ OPEN ]---------------------------------------------
#
代碼: 選擇全部
common.php#-----[ FIND ]---------------------------------------------
# Line 80
代碼: 選擇全部
if (!in_array($var, $not_unset))
{
unset($$var);
}#-----[ REPLACE WITH ]---------------------------------------------
#
代碼: 選擇全部
if (in_array($var, $not_unset))
{
die('Hacking attempt!');
}
unset($$var);#-----[ OPEN ]---------------------------------------------
#
代碼: 選擇全部
includes/functions.php#-----[ FIND ]---------------------------------------------
# Line 171
代碼: 選擇全部
return substr($val, 16);#-----[ REPLACE WITH ]---------------------------------------------
#
代碼: 選擇全部
return substr($val, 4, 16);#-----[ FIND ]---------------------------------------------
# Line 307
代碼: 選擇全部
global $template, $lang, $phpEx, $phpbb_root_path;
global $nav_links;
//-- mod : mods settings ---------------------------------------------------------------------------
//-- add
global $db, $mods, $list_yes_no, $userdata;#-----[ REPLACE WITH ]---------------------------------------------
#
代碼: 選擇全部
global $template, $lang, $phpEx, $phpbb_root_path, $db;
global $nav_links;
//-- mod : mods settings ---------------------------------------------------------------------------
//-- add
global $mods, $list_yes_no, $userdata;#-----[ FIND ]---------------------------------------------
# Line 314
代碼: 選擇全部
$board_config['default_lang'] = $userdata['user_lang'];#-----[ REPLACE WITH ]---------------------------------------------
#
代碼: 選擇全部
$default_lang = phpbb_ltrim(basename(phpbb_rtrim($userdata['user_lang'])), "'");#-----[ FIND ]---------------------------------------------
# Line 327
代碼: 選擇全部
if ( !file_exists(@phpbb_realpath($phpbb_root_path . 'language/lang_' . $board_config['default_lang'] . '/lang_main.'.$phpEx)) )
{
$board_config['default_lang'] = 'english';
}#-----[ REPLACE WITH ]---------------------------------------------
#
代碼: 選擇全部
else
{
$default_lang = phpbb_ltrim(basename(phpbb_rtrim($board_config['default_lang'])), "'");
}
if ( !file_exists(@phpbb_realpath($phpbb_root_path . 'language/lang_' . $default_lang . '/lang_main.'.$phpEx)) )
{
if ( $userdata['user_id'] != ANONYMOUS )
{
// For logged in users, try the board default language next
$default_lang = phpbb_ltrim(basename(phpbb_rtrim($board_config['default_lang'])), "'");
}
else
{
// For guests it means the default language is not present, try english
// This is a long shot since it means serious errors in the setup to reach here,
// but english is part of a new install so it's worth us trying
$default_lang = 'english';
}
if ( !file_exists(@phpbb_realpath($phpbb_root_path . 'language/lang_' . $default_lang . '/lang_main.'.$phpEx)) )
{
message_die(CRITICAL_ERROR, 'Could not locate valid language pack');
}
}
// If we've had to change the value in any way then let's write it back to the database
// before we go any further since it means there is something wrong with it
if ( $userdata['user_id'] != ANONYMOUS && $userdata['user_lang'] !== $default_lang )
{
$sql = 'UPDATE ' . USERS_TABLE . "
SET user_lang = '" . $default_lang . "'
WHERE user_lang = '" . $userdata['user_lang'] . "'";
if ( !($result = $db->sql_query($sql)) )
{
message_die(CRITICAL_ERROR, 'Could not update user language info');
}
$board_config['default_lang'] = $default_lang;
$userdata['user_lang'] = $default_lang;
}
elseif ( $board_config['default_lang'] !== $default_lang )
{
$sql = 'UPDATE ' . CONFIG_TABLE . "
SET config_value = '" . $default_lang . "'
WHERE config_name = 'default_lang'";
if ( !($result = $db->sql_query($sql)) )
{
message_die(CRITICAL_ERROR, 'Could not update user language info');
}
$board_config['default_lang'] = $default_lang;
}#-----[ FIND ]---------------------------------------------
# Line 441
代碼: 選擇全部
$sql = "SELECT *
FROM " . THEMES_TABLE . "
WHERE themes_id = $style";#-----[ REPLACE WITH ]---------------------------------------------
#
代碼: 選擇全部
$sql = 'SELECT *
FROM ' . THEMES_TABLE . '
WHERE themes_id = ' . (int) $style;#-----[ FIND ]---------------------------------------------
# Line 458
代碼: 選擇全部
WHERE themes_id = ' . $board_config['default_style'];#-----[ REPLACE WITH ]---------------------------------------------
#
代碼: 選擇全部
WHERE themes_id = ' . (int) $board_config['default_style'];#-----[ FIND ]---------------------------------------------
# Line 469
代碼: 選擇全部
SET user_style = ' . $board_config['default_style'] . "#-----[ REPLACE WITH ]---------------------------------------------
#
代碼: 選擇全部
SET user_style = ' . (int) $board_config['default_style'] . "#-----[ OPEN ]---------------------------------------------
#
代碼: 選擇全部
includes/functions_post.php#-----[ FIND ]---------------------------------------------
# Line 59
代碼: 選擇全部
$message .= htmlspecialchars($part) . clean_html($tag);
}
$message = addslashes($message);#-----[ REPLACE WITH ]---------------------------------------------
#
代碼: 選擇全部
$message .= preg_replace($html_entities_match, $html_entities_replace, $part) . clean_html($tag);
}
$message = addslashes($message);
$message = str_replace('"', '\"', $message);#-----[ FIND ]---------------------------------------------
# Line 411
代碼: 選擇全部
$sql = "UPDATE " . FORUMS_TABLE . " SET
$forum_update_sql
WHERE forum_id = $forum_id";
if (!$db->sql_query($sql))
{
message_die(GENERAL_ERROR, 'Error in posting', '', __LINE__, __FILE__, $sql);
}#-----[ REPLACE WITH ]---------------------------------------------
#
代碼: 選擇全部
if ($mode != 'poll_delete')
{
$sql = "UPDATE " . FORUMS_TABLE . " SET
$forum_update_sql
WHERE forum_id = $forum_id";
if (!$db->sql_query($sql))
{
message_die(GENERAL_ERROR, 'Error in posting', '', __LINE__, __FILE__, $sql);
}
}#-----[ OPEN ]---------------------------------------------
#
代碼: 選擇全部
includes/sessions.php#-----[ FIND ]---------------------------------------------
# Line 365
代碼: 選擇全部
setcookie($cookiename . '_data', serialize($sessiondata), $current_time + 31536000, $cookiepath, $cookiedomain, $cookiesecure);
setcookie($cookiename . '_sid', $session_id, 0, $cookiepath, $cookiedomain, $cookiesecure);
}#
#-----[ AFTER, ADD ]---------------------------------------------
#
代碼: 選擇全部
// Add the session_key to the userdata array if it is set
if ( isset($sessiondata['autologinid']) && $sessiondata['autologinid'] != '' )
{
$userdata['session_key'] = $sessiondata['autologinid'];
}#
#-----[ FIND ]---------------------------------------------
# Line 505
代碼: 選擇全部
function session_reset_keys($user_id, $user_ip)
{
global $db, $userdata;#-----[ REPLACE WITH ]---------------------------------------------
#
代碼: 選擇全部
function session_reset_keys($user_id, $user_ip)
{
global $db, $userdata, $board_config;#-----[ FIND ]---------------------------------------------
# Line 544
代碼: 選擇全部
// And now rebuild the cookie
$sessiondata['userid'] = $user_id;
$sessiondata['autologinid'] = $autologin_id;#-----[ REPLACE WITH ]---------------------------------------------
#
代碼: 選擇全部
// And now rebuild the cookie
$sessiondata['userid'] = $user_id;
$sessiondata['autologinid'] = $auto_login_key;#-----[ OPEN ]---------------------------------------------
#
代碼: 選擇全部
includes/usercp_avatar.php#-----[ FIND ]---------------------------------------------
# Line 120
代碼: 選擇全部
if ( $avatar_mode == 'remote' && preg_match('/^(http:\/\/)?([\w\-\.]+)\:?([0-9]*)\/(.*)$/', $avatar_filename, $url_ary) )#-----[ REPLACE WITH ]---------------------------------------------
#
代碼: 選擇全部
if ( $avatar_mode == 'remote' && preg_match('/^(http:\/\/)?([\w\-\.]+)\:?([0-9]*)\/([^ \?&=\#\"\n\r\t<jpg>sql_query($sql);
}
*/
// End add - Protect user account MOD
if ($row['user_id'] != ANONYMOUS)
{
$sql = 'UPDATE ' . USERS_TABLE . '
SET ct_logintry = 1
WHERE user_id = ' . $row['user_id'];
$db->sql_query($sql);
}
$redirect = ( !empty($_POST['redirect']) ) ? str_replace('&', '&', htmlspecialchars($_POST['redirect'])) : '';
$redirect = str_replace('?', '&', $redirect);
if (strstr(urldecode($redirect), "\n") || strstr(urldecode($redirect), "\r"))
{
message_die(GENERAL_ERROR, 'Tried to redirect to potentially insecure url.');
}
$template->assign_vars(array(
'META' => "<meta>")
);
// Start add - Protect user account MOD
if ($row['user_active'] )
{
//count bad login
// block the user for X min
if (($row['user_badlogin']+1) % $board_config['max_login_error'])
{
$sql = "UPDATE " . USERS_TABLE . " SET user_badlogin=user_badlogin+1
WHERE username = '" . str_replace("\'", "''", $username) . "'";
if ( !($result = $db->sql_query($sql)) )
{
message_die(GENERAL_ERROR, 'Error updating bad login data'.$user_ip, '', __LINE__, __FILE__, $sql);
}
} else
{
$blocktime = ", user_block_by='$user_ip', user_blocktime='" . (time()+($board_config['block_time']*60)) . "'";
$sql = "UPDATE " . USERS_TABLE . " SET user_badlogin=user_badlogin+1 $blocktime
WHERE username = '" . str_replace("\'", "''", $username) . "'";
if ( !($result = $db->sql_query($sql)) )
{
message_die(GENERAL_ERROR, 'Error updating bad login data'.$user_ip, '', __LINE__, __FILE__, $sql);
}
if ($row['user_email'] && $row['user_blocktime']<time>email_address($row['user_email']);
$email_headers = "To: \"".$row['username']."\" <row>use_template('bad_login', $row['user_lang']);
$emailer->extra_headers($email_headers);
$emailer->assign_vars(array(
'USER' => '"'.$row['username'].'"',
'BLOCK_TIME' => $board_config['block_time'],
'BAD_LOGINS' => $row['user_badlogin']+1,
'BLOCK_UNTIL' => create_date ($lang['Time_format'],time()+($board_config['block_time']*60),$row['user_timezone']),
'SITENAME' => $board_config['sitename'],
'BOARD_EMAIL' => $board_config['board_email']));
$emailer->send();
$emailer->reset();
}
}
}
// End add - Protect user account MOD
$message = $lang['Error_login'] . '<br><br>' . sprintf($lang['Click_return_login'], "<a href="login.$phpEx?redirect=$redirect\">", '</a>') . '<br><br>' . sprintf($lang['Click_return_index'], '<a href="' . append_sid(">', '</a>');
message_die(GENERAL_MESSAGE, $message);
}
// Start add - Protect user account MOD
} else
{
$message = (($lang['Error_login_tomutch'])?$lang['Error_login_tomutch']:$lang['Error_login']) . '<br><br>' . sprintf($lang['Click_return_login'], '<a href="' . append_sid(">', '</a>') . '<br><br>' . sprintf($lang['Click_return_index'], '<a href="' . append_sid(">', '</a>');
message_die(GENERAL_MESSAGE, $message);
}
// End add - Protect user account MOD
}
}
else#-----[ REPLACE WITH ]---------------------------------------------
#
代碼: 選擇全部
// Only store a failed login attempt for an active user - inactive users can't login even with a correct password
elseif( $row['user_active'] )
{
// Start add - Protect user account MOD
/*
// Save login tries and last login
if ($row['user_id'] != ANONYMOUS)
{
$sql = 'UPDATE ' . USERS_TABLE . '
SET user_login_tries = user_login_tries + 1, user_last_login_try = ' . time() . '
WHERE user_id = ' . $row['user_id'];
$db->sql_query($sql);
}
*/
// End add - Protect user account MOD
if ($row['user_id'] != ANONYMOUS)
{
$sql = 'UPDATE ' . USERS_TABLE . '
SET ct_logintry = 1
WHERE user_id = ' . $row['user_id'];
if( !$db->sql_query($sql))
{
message_die(CRITICAL_ERROR, "Could not perform Database operation", "", __LINE__, __FILE__, $sql);
}
}
// Start add - Protect user account MOD
//count bad login
// block the user for X min
if (($row['user_badlogin']+1) % $board_config['max_login_error'])
{
$sql = "UPDATE " . USERS_TABLE . " SET user_badlogin=user_badlogin+1
WHERE username = '" . str_replace("\'", "''", $username) . "'";
if ( !($result = $db->sql_query($sql)) )
{
message_die(GENERAL_ERROR, 'Error updating bad login data'.$user_ip, '', __LINE__, __FILE__, $sql);
}
} else
{
$blocktime = ", user_block_by='$user_ip', user_blocktime='" . (time()+($board_config['block_time']*60)) . "'";
$sql = "UPDATE " . USERS_TABLE . " SET user_badlogin=user_badlogin+1 $blocktime
WHERE username = '" . str_replace("\'", "''", $username) . "'";
if ( !($result = $db->sql_query($sql)) )
{
message_die(GENERAL_ERROR, 'Error updating bad login data'.$user_ip, '', __LINE__, __FILE__, $sql);
}
if ($row['user_email'] && $row['user_blocktime']<time>email_address($row['user_email']);
$email_headers = "To: \"".$row['username']."\" <row>use_template('bad_login', $row['user_lang']);
$emailer->extra_headers($email_headers);
$emailer->assign_vars(array(
'USER' => '"'.$row['username'].'"',
'BLOCK_TIME' => $board_config['block_time'],
'BAD_LOGINS' => $row['user_badlogin']+1,
'BLOCK_UNTIL' => create_date ($lang['Time_format'],time()+($board_config['block_time']*60),$row['user_timezone']),
'SITENAME' => $board_config['sitename'],
'BOARD_EMAIL' => $board_config['board_email']));
$emailer->send();
$emailer->reset();
}
}
// End add - Protect user account MOD
}
}
$redirect = ( !empty($_POST['redirect']) ) ? str_replace('&', '&', htmlspecialchars($_POST['redirect'])) : '';
$redirect = str_replace('?', '&', $redirect);
if (strstr(urldecode($redirect), "\n") || strstr(urldecode($redirect), "\r"))
{
message_die(GENERAL_ERROR, 'Tried to redirect to potentially insecure url.');
}
$template->assign_vars(array(
'META' => "<meta>")
);
// Start add - Protect user account MOD
/*
$message = $lang['Error_login'] . '<br><br>' . sprintf($lang['Click_return_login'], "<a href="login.$phpEx?redirect=$redirect\">", '</a>') . '<br><br>' . sprintf($lang['Click_return_index'], '<a href="' . append_sid(">', '</a>');
*/
$message = (($lang['Error_login_tomutch'])?$lang['Error_login_tomutch']:$lang['Error_login']) . '<br><br>' . sprintf($lang['Click_return_login'], '<a href="' . append_sid(">', '</a>') . '<br><br>' . sprintf($lang['Click_return_index'], '<a href="' . append_sid(">', '</a>');
message_die(GENERAL_MESSAGE, $message);
// End add - Protect user account MOD
}
}
else#-----[ OPEN ]---------------------------------------------
#
代碼: 選擇全部
privmsg.php#-----[ FIND ]---------------------------------------------
# Line 1510
代碼: 選擇全部
$orig_word = $replacement_word = array();
obtain_word_list($orig_word, $replace_word);#-----[ REPLACE WITH ]---------------------------------------------
#
代碼: 選擇全部
$orig_word = $replacement_word = array();
obtain_word_list($orig_word, $replacement_word);#-----[ OPEN ]---------------------------------------------
#
代碼: 選擇全部
profile.php#-----[ FIND ]---------------------------------------------
# Line 60
代碼: 選擇全部
return ( $hash ) ? md5($rand_str) : substr($rand_str, 8);#-----[ REPLACE WITH ]---------------------------------------------
#
代碼: 選擇全部
return ( $hash ) ? md5($rand_str) : substr($rand_str, 0, 8);#-----[ OPEN ]---------------------------------------------
#
代碼: 選擇全部
search.php#-----[ FIND ]---------------------------------------------
# Line 216
代碼: 選擇全部
if( !$only_bluecards && ( strpos($search_author, '%') !== false ) && ( strlen(str_replace('%', '', $search_author)) < 3 ) )#-----[ REPLACE WITH ]---------------------------------------------
#
代碼: 選擇全部
if( !$only_bluecards && ( strpos($search_author, '%') !== false ) && ( strlen(str_replace('%', '', $search_author)) < $board_config['search_min_chars'] ) )#-----[ FIND ]---------------------------------------------
# Line 288
代碼: 選擇全部
if (!$only_bluecards && (preg_match('#^[\*%]+$#', trim($split_search[$i])) || preg_match('#^[^\*]{1,2}$#', str_replace(array('*', '%'), '', trim($split_search[$i])))) )#-----[ REPLACE WITH ]---------------------------------------------
#
代碼: 選擇全部
if (!$only_bluecards && ( strlen(str_replace(array('*', '%'), '', trim($split_search[$i]))) < $board_config['search_min_chars'] ) )#-----[ FIND ]---------------------------------------------
# Line 439
代碼: 選擇全部
if (preg_match('#^[\*%]+$#', trim($search_author)) || preg_match('#^[^\*]{1,2}$#', str_replace(array('*', '%'), '', trim($search_author))))
{
$search_author = '';
}
$search_author = str_replace('*', '%', trim(str_replace("\'", "''", $search_author)));#-----[ REPLACE WITH ]---------------------------------------------
#
代碼: 選擇全部
$search_author = str_replace('*', '%', trim($search_author));
if( ( strpos($search_author, '%') !== false ) && ( strlen(str_replace('%', '', $search_author)) <board_config>(((?>([^><]+|(?R)))*)\<))#se', "@preg_replace('#\b(" . str_replace('\\', '\\\\', addslashes($highlight_match)) . ")\b#i', '<span><b>\\\\1</b></span>', '\\0')", '>' . $message . '</b>(((?>([^><]+|(?R)))*)\<))#se', "@preg_replace('#\b(" . str_replace('\\', '\\\\', addslashes($highlight_match)) . ")\b#i', '<span><b>\\\\1</b></span>', '\\0')", '>' . $message . '</b>(((?>([^><]+|(?R)))*)\<))#se', "@preg_replace('#\b(" . str_replace('\\', '\\\\', addslashes($highlight_match)) . ")\b#i', '<span><b>\\\\1</b></span>', '\\0')", '>' . $article . '<'), 1, -1));#-----[ REPLACE WITH ]---------------------------------------------
#
代碼: 選擇全部
// This has been back-ported from 3.0 CVS
$article = preg_replace('#(?!<.*)(?<!\w)(' . $highlight_match . ')(?!\w|[^<>]*>)#i', '<b>\1</b>', $article);#-----[ SAVE/CLOSE ALL FILES ]------------------------------------------
#
# EoM
