[建議] 解決PHPBB 2.0.6發表時出現錯誤的問題

phpBB Installation & Usage Support
phpBB 2 安裝於各類型作業平台之問題討論;外掛問題,請到相關版面依發問格式發表!
(發表文章請按照公告格式發表,違者砍文)

版主: 版主管理群

版面規則
本區是討論關於 phpBB 2.0.X 架設安裝上的問題,只要有安裝任何外掛,請到外掛討論相關版面按照公告格式發表。
(發表文章請按照公告格式發表,違者砍文)
主題已鎖定
ecap
星球普通子民
星球普通子民
文章: 2
註冊時間: 2003-11-28 22:57

[建議] 解決PHPBB 2.0.6發表時出現錯誤的問題

文章 ecap »

●架設主機作業系統:Window 2000 Pro/Server
●安裝程式:IIS 5.0 + PHP 4.3.4 + PHPBB 2.0.6 + SQL Server 2000

PHPBB 2.0.6

page: functions_search.php
function: clean_words($mode, &$entry, &$stopword_list, &$synonym_list)
line: 50

發生問題原因:
程式直接使用 str_replace 函式 做字串取代,
使得中文字低階字元中含有 clean_words 定義取代的字元被取代成空字串\r
造成資料錯誤, 且存入資料庫時 SQL 語法也會出錯\r

以下為修改方式 (已測試)

修改前:
//
// Filter out strange characters like ^, $, &, change "it's" to "its"
//
for($i = 0; $i < count($drop_char_match); $i++)
{
$entry = str_replace($drop_char_match[$i], $drop_char_replace[$i], $entry);
}

修改後:
//
// Filter out strange characters like ^, $, &, change "it's" to "its"
//
$big5chrAry = array('@','[','\\\',']','^','_','`','{','|','~','}'); // Big5 低位元會用到的字碼\r
$entrytmp = substr($entry,0,1);
for ($j = 1; $j< strlen($entry);$j++)
{
$hightbig5 = Ord(substr($entry,$j-1,1));
$lowbig5 = substr($entry,$j,1);
$lowbig5tmp = $lowbig5;

foreach ($big5chrAry as $big5chr)
{
if (!($lowbig5tmp==$lowbig5 && $lowbig5 == $big5chr && $hightbig5 > 161 && $hightbig5 <= 255))
{
//當判定不是 Big5 字元時
for($i = 0; $i < count($drop_char_match); $i++)
{
if ($lowbig5 == $drop_char_match[$i])
{
$lowbig5tmp = $drop_char_replace[$i];
}
}
}
}
$entrytmp .= $lowbig5;
}
$entry = $entrytmp;

//This program writed by William Liu
永遠的:)
主題已鎖定

回到「phpBB 2 安裝與使用」