[分享] 解決_許功蓋_的方法

與 phpBB 2.0.x 相關主題。

版主: 版主管理群

回覆文章
頭像
心靈捕手
默默耕耘的老師
默默耕耘的老師
文章: 8510
註冊時間: 2004-04-30 01:54
來自: Taiwan

[分享] 解決_許功蓋_的方法

文章 心靈捕手 »

[前言]
長期以來, 我一直忽略這個存在已久的問題--許功蓋--衝碼;
直到日前, 在討論( 依夢兒 的提問) 時, 才又正視這個問題.
http://phpbb-tw.net/phpbb/viewtopic.php?p=203873#203873

如果, 您還有此一困擾的話,
那麼此篇文章, 將提供您一些解決方法.

[分享] 解決_許功蓋_的方法
由於之前的修改\r

代碼: 選擇全部

magic_quotes_sybase = On 
會造成" 原作者引言" 失效,
http://wang5555.dnsfor.me/phpbb2/viewtopic. ... 9568#29568
所以改採其他途徑, 設法解決:
  1. 把程式中的stripslashes()拿掉
    http://twcms.net/ldu/forums.php?m=posts&q=42
    http://kevinkao.idv.tw/mt/archives/000470.php
  2. 修改PHP源始程式,改以'\\\'作為特別符號
    http://www.ossacc.org/QA/qa_php/21
  3. 不將許功蓋做為字尾,例如加一空白
    http://wang5555.dnsfor.me/phpbb2/viewtopic. ... 9570#29570
  4. 送進 mysql 時,請用 '' 括起來,並在參數後留一個空白
    http://rdec.cosa.org.tw/modules.php?nam ... &id_cat=10
其中, 第一項修改, 一直沒有搔到癢處;
第二項修改, 因為不完全熟悉 PHP 語法, 所以不敢輕易嘗試;
第三項建議, 則純粹為發文者必須加以注意, 即可;
最後一項建議, 經由程式的修改後, 終於成功解決主題( 文章) 字尾_許功蓋

以下的修改, 提供給大家參考:
#
#-----[ Open ]-----
#

代碼: 選擇全部

includes/functions_post.php
#
#-----[ Find ]-----
#

代碼: 選擇全部

$sql  = ($mode != "editpost") ? "INSERT INTO " . TOPICS_TABLE . "
#
#-----[ In Line Find ]-----
#

代碼: 選擇全部

'$post_subject'
#
#-----[ Replace With ]-----
#

代碼: 選擇全部

'$post_subject '
#
#-----[ In Line Find ]-----
#

代碼: 選擇全部

topic_title = '$post_subject'
#
#-----[ Replace With ]-----
#

代碼: 選擇全部

topic_title = '$post_subject '
#
#-----[ Find ]-----
#

代碼: 選擇全部

$sql = ($mode != 'editpost') ? "INSERT INTO " . POSTS_TEXT_TABLE . "
#
#-----[ In Line Find ]-----
#

代碼: 選擇全部

'$post_subject'
#
#-----[ Replace With ]-----
#

代碼: 選擇全部

'$post_subject '
#
#-----[ In Line Find ]-----
#

代碼: 選擇全部

'$post_message'
#
#-----[ Replace With ]-----
#

代碼: 選擇全部

'$post_message '
#
#-----[ In Line Find ]-----
#

代碼: 選擇全部

post_text = '$post_message'
#
#-----[ Replace With ]-----
#

代碼: 選擇全部

post_text = '$post_message '
#
#-----[ In Line Find ]-----
#

代碼: 選擇全部

post_subject = '$post_subject'
#
#-----[ Replace With ]-----
#

代碼: 選擇全部

post_subject = '$post_subject '
#
#-----[ Find ]-----
#

代碼: 選擇全部

$sql = (!$post_data['has_poll']) ? "INSERT INTO " . VOTE_DESC_TABLE . "
#
#-----[ In Line Find ]-----
#

代碼: 選擇全部

'$poll_title'
#
#-----[ Replace With ]-----
#

代碼: 選擇全部

'$poll_title '
#
#-----[ In Line Find ]-----
#

代碼: 選擇全部

vote_text = '$poll_title'
#
#-----[ Replace With ]-----
#

代碼: 選擇全部

vote_text = '$poll_title '
#
#-----[ Find ]-----
#

代碼: 選擇全部

$sql = ($mode != "editpost" || !isset($old_poll_result[$option_id])) ? "INSERT INTO " . VOTE_RESULTS_TABLE . "
#
#-----[ In Line Find ]-----
#

代碼: 選擇全部

'$option_text'
#
#-----[ Replace With ]-----
#

代碼: 選擇全部

'$option_text '
#
#-----[ In Line Find ]-----
#

代碼: 選擇全部

vote_option_text = '$option_text'
#
#-----[ Replace With ]-----
#

代碼: 選擇全部

vote_option_text = '$option_text '

經過修正後, 便可以發表文章, 主題, 內容或票選主題, 選項, 字尾含" 許功蓋".
Demo: http://wang5555.dnsfor.me/phpbb2/viewforum.php?t=14288

[補充說明]:
1. 其實, 說穿了, 就是在原來參數的後面, 多加一個空格吧了!
例如:
您如果也想解決" 個人資料" 的" 興趣" 欄位, 無法填寫" 許功蓋" 的問題的話,
那麼您可以比照處理如下:
#
#-----[ Open ]-----
#

代碼: 選擇全部

includes/usercp_register.php
#
#-----[ Find ]-----
#

代碼: 選擇全部

			$sql = "UPDATE " . USERS_TABLE . "
				SET " . $username_sql . $passwd_sql . "user_email = '" . str_replace("\'", "''", $email) ."'
#
#-----[ In Line Find ]-----
#

代碼: 選擇全部

user_interests = '" . str_replace("\'", "''", $interests) . "'
#
#-----[ Replace With ]-----
#

代碼: 選擇全部

user_interests = '$interests '
2. 這個修正方法, 當資料匯出時, 會將空白字元轉為 '\';
一旦有引言回覆時, 所產生的斜線會越多.

建議利用這篇文章(底下回文二) ~倉木麻衣~ 兄的方法修正:

http://phpbb-tw.net/phpbb/viewtopic.php?p=226930#226930
最後由 心靈捕手 於 2006-02-09 20:08 編輯,總共編輯了 1 次。
施比受有福,祝福您好運! ^_^
歡迎光臨★★心靈捕手★★ :: 討論區
https://wang5555.dnsfor.me/phpBB3/
so8so
星球普通子民
星球普通子民
文章: 14
註冊時間: 2004-11-05 23:31

文章 so8so »

新架站的人, 直接用 UTF-8 編碼, 就沒問題了
PowWeb 付費空間推薦, 容量 5000MB, 流量 10 GB/每天, 價格 $7.77/月
美國空間, 購買 到 完成設定 約要 2個工作天
頭像
心靈捕手
默默耕耘的老師
默默耕耘的老師
文章: 8510
註冊時間: 2004-04-30 01:54
來自: Taiwan

[轉貼] 許功蓋衝碼字的修正

文章 心靈捕手 »

此文原作者: ~倉木麻衣~
Source: http://phpbb-tw.net/phpbb/viewtopic.php?p=226914#226914

--
對於決定採用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
施比受有福,祝福您好運! ^_^
歡迎光臨★★心靈捕手★★ :: 討論區
https://wang5555.dnsfor.me/phpBB3/
回覆文章

回到「2.0」