1 頁 (共 1 頁)

[分享]解決PO文在 functions_search.php 會出錯的問題

發表於 : 2007-12-04 09:47
ycl8000
我先說一下我的環境:

作業系統: windows XP 繁體中文版
PHP版本:4.4.6
資料庫: SQL 2000 繁體中文版
PHPBB版本: PHPBB2.0.22
Apache版本: Release 10337100
使用編碼: BIG5
沒有裝任何外掛.

基於某種原因,這個站必須使用BIG5編碼 + SQL2000資料庫,
然而這方面的資料很少,(比起MySQL的資料,少太多太多了).

首先我按照 Scorpion 發表的這一篇做多國這言的修正.
http://ibf.myweb.hinet.net/doc/phpBB2015_multilang.html

之後我發表新文章, 老是會在 functions_search.php 這邊出錯,
doraemonalex 有回一篇文章,裡面提到把註解拿掉即可.
http://phpbb-tw.net/phpbb/viewtopic.php?p=258233#258233

我測試的結果是,這樣雖然可以避掉這個問題,但是會影響搜尋功能 :-( ,
PO的文章之後會搜尋不出來, 可以看一下資料庫中的
phpbb_search_wordlist 資料表,裡面都是存字元.而不是關鍵字串.

我一步步的檢查,找出原因是出在functions_search.php 裡面的
function clean_words($mode, &$entry, &$stopword_list, &$synonym_list),
Big5的文字經過這段函式處理後,有些字會變亂碼,導致後續程式會出錯,

我試了很多方法,最後終於讓我解決了這個問題,試了二天才試出來,
超感動的 :mrgreen:

解決的原理是先把Big5的字串輚換成UTF-8格式, 讓 clean_words這個函式去處理,等處理完後,再轉回成Big5就OK了.

代碼: 選擇全部

修改方法如下:
開啟 /includes/functions_search.php

尋找 $entry = ' ' . strip_tags(strtolower($entry)) . ' ';

在之前加上 $entry = mb_convert_encoding ( $entry, 'utf-8','big5' );

尋找 return $entry;

在之前加上 $entry = mb_convert_encoding ( $entry, 'big5','utf-8' );

存檔
PS: php.ini 裡面要加掛 extension=php_mbstring.dll 才能使用 mb_convert_encoding 這個函式.