對於決定採用big5編碼的全新論壇而言
個人會建議參考這篇文章做許功蓋衝碼字的修正
http://chensh.loxa.edu.tw/php/X_1.php
目前個人只先在submit_post()裡實作這項改變
修改的變數是參考心靈捕手的
這篇文章
#
#--------[ OPEN ]----------------
#
includes/functions.php
#
#--------[ FIND ]----------------
#
#
#--------[ BEFORE, ADD ]----------------
#
代碼: 選擇全部
function Fix_Backslash($org_str) {
//if ( mysql_client_encoding() != "big5" ) return mysql_client_encoding();
$tmp_length = strlen($org_str);
for ( $tmp_i=0; $tmp_i<$tmp_length; $tmp_i++ ) {
$ascii_str_a = substr($org_str, $tmp_i , 1);
$ascii_str_b = substr($org_str, $tmp_i+1, 1);
$ascii_value_a = ord($ascii_str_a);
$ascii_value_b = ord($ascii_str_b);
if ( $ascii_value_a > 128 ) {
if ( $ascii_value_b == 92 ) {
$org_str = substr($org_str, 0, $tmp_i+2) . substr($org_str,$tmp_i+3);
$tmp_length = strlen($org_str);
}
$tmp_i++;
}
}
$tmp_length = strlen($org_str);
if ( substr($org_str, ($tmp_length-1), 1) == "\\\" ) $org_str .= chr(32);
$org_str = str_replace("\\\0", "\ 0", $org_str);
return $org_str;
}
#
#--------[ OPEN ]----------------
#
includes/functions_post.php
#
#--------[ FIND ]----------------
#
代碼: 選擇全部
include($phpbb_root_path . 'includes/functions_search.'.$phpEx);
$current_time = time();
#
#--------[ BEFORE, ADD ]----------------
#
代碼: 選擇全部
//--修正許 功 蓋 問題?#125;始
$post_subject = Fix_Backslash($post_subject);
$post_message = Fix_Backslash($post_message);
$poll_title = Fix_Backslash($poll_title);
$option_text = Fix_Backslash($option_text);
//--修正許 功 蓋 問題結束
#
#--------[ SAVE/CLOSE ALL FILES ]----------------
#
# EoM
根據測試, 若是採用心靈手捕的方式在資料最後頭加上空白字元, 則資料匯出時會得到如下的內容
如果是採用上述的修正, 那麼就會得到這樣的內容
接著再來測試當許功蓋被引言時的狀況, 此時匯出的資料為\r
(註:在我自己的機器上測試時, 此篇的post_id=60)
代碼: 選擇全部
'[color=black][[/color]quote:9c1d10bc3d="Anonymous"]許功\\\\\\\\蓋 [/quote:9c1d10bc3d] '
很明顯的, 功字後頭的斜線會愈來愈多
如果是採用上述的修正, 那麼就會得到這樣的內容
代碼: 選擇全部
'[color=black][[/color]quote:9c1d10bc3d="Anonymous"]許功蓋 [/quote:9c1d10bc3d] '
相信經過比較後, 應該可以很清楚的看出這二種修正法的差異\r
而且採用上述方式的話, 就算日後要轉換成utf8碼時, 也不用擔心那些惱人的斜線問題了
ps.
以上測試環境
PHP 4.4.2
MySQL 4.1.16 characterset採big5
php.ini設定
magic_quotes_gpc = On
magic_quotes_sybase = Off