[其它] list bbcode 修正

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

版主: 版主管理群

版面規則
本區是討論關於 phpBB 2.0.X 架設安裝上的問題,只要有安裝任何外掛,請到外掛討論相關版面按照公告格式發表。
(發表文章請按照公告格式發表,違者砍文)
主題已鎖定
~倉木麻衣~
竹貓忠實會員
竹貓忠實會員
文章: 1405
註冊時間: 2004-03-21 21:00

[其它] list bbcode 修正

文章 ~倉木麻衣~ »

常在用 list bbcode 的人應該或多或少有發現這bbcode有些怪異, 其實這應該是存在很久的bug了
先來看一下範例
正常的:

代碼: 選擇全部

[list=1][*]111
[list][*]aaa[/list]
[*]222[/list]
  1. 111
    • aaa
  2. 222
不正常的:

代碼: 選擇全部

[list][*]111
[list=1][*]aaa[/list]
[*]222[/list]
  • 111
    1. aaa
  • 222
這兩個list的差別只有變更list的順序, 本來結果應該都是相同的,但卻一組卻發生了錯誤

針對 list bbcode 判斷上的錯誤, 個人做了底下的修正
目前的測試結果都很正常, 提供給大家參考參考

#
#--------[ OPEN ]----------------
#
includes/bbcode.php

#
#--------[ FIND ]----------------
#

代碼: 選擇全部

	$open_tag = array();
	$open_tag[0] = "[list]";

	// unordered..
	$text = bbencode_first_pass_pda($text, $uid, $open_tag, "[/list]", "[/list:u]", false, 'replace_listitems');

	$open_tag[0] = "[list=1]";
	$open_tag[1] = "[list=a]";

	// ordered.
	$text = bbencode_first_pass_pda($text, $uid, $open_tag, "[/list]", "[/list:o]",  false, 'replace_listitems');
#
#--------[ REPLACE WITH ]----------------
#

代碼: 選擇全部

/**	$open_tag = array();
 *	$open_tag[0] = "[list]";
 *
 *	// unordered..
 *	$text = bbencode_first_pass_pda($text, $uid, $open_tag, "[/list]", "[/list:u]", false, 'replace_listitems');
 *
 *	$open_tag[0] = "[list=1]";
 *	$open_tag[1] = "[list=a]";
 *
 *	// ordered.
 *	$text = bbencode_first_pass_pda($text, $uid, $open_tag, "[/list]", "[/list:o]",  false, 'replace_listitems');
 */
	if (preg_match("/\[list(=[a1])?\]/si", $text))
	{
		$text = bbencode_list_pass($text, $uid);
	}
#
#--------[ FIND ]----------------
#

代碼: 選擇全部

?>
#
#--------[ BEFORE, ADD ]----------------
#

代碼: 選擇全部

function bbencode_list_pass($text, $uid)
{
	$text = preg_replace("#\[list(=[a1])?\]#si", "[list\\1:$uid]", $text);

	$curr_pos = 1;
	$open_arry = Array();

	while ($curr_pos && ($curr_pos < strlen($text)))
	{
		$list_type = '';
		$curr_pos = strpos($text, "[", $curr_pos);
		if ($curr_pos)
		{
			$possible_tag = substr($text, $curr_pos, strpos($text, ']', $curr_pos + 1) - $curr_pos + 1);
			if (strcasecmp($possible_tag, "[list:$uid]") == 0)
			{
				array_push($open_arry, 'u');
			}
			elseif (strcasecmp($possible_tag, "[list=1:$uid]") == 0 || strcasecmp($possible_tag, "[list=a:$uid]") == 0)
			{
				array_push($open_arry, 'o');
			}
			elseif (strcasecmp($possible_tag, '[/list]') == 0)
			{
				$list_type = array_pop($open_arry);
				$text = substr_replace($text, "[/list:$list_type:$uid]", $curr_pos, strlen($possible_tag));
				$curr_pos += strlen($possible_tag);
			} else {
				++$curr_pos;
				continue;
			}
			$curr_pos += strlen($possible_tag);
		}
	}

	$text = replace_listitems($text, $uid);
	return $text;
}
#
#--------[ SAVE/CLOSE FILE ]----------------
#
# EoM
謝絕所有私人訊息詢問外掛相關問題
有問題請直接於版上發表, 集思廣議絕對比專挑特定人士詢問來的好

竹貓禁止發表含破解相關的軟體, 違者砍文
不要跟我講別的地方都可以發, 為什麼竹貓就不行
免費不等於破解, 傻傻的搞不清楚
進藤光
星球公民
星球公民
文章: 291
註冊時間: 2005-03-16 18:48
來自: BNW 時尚資訊網
聯繫:

文章 進藤光 »

還真的是有這個 bug 呢!只不過我很少是用多層次的 List,所以一直也沒遇到這個問題!我改好了但是卻看不到任何效果!會不會是倉木少貼了某些程式?
※架設伺服器主機:Mac mini G4-1.5GHz, 1GB RAM 三台
※架設主機作業系統:Mac OS X Server 10.4.2 Tiger
※我的上網方式:固定制 ADSL 4M/1M、3 IP
※安裝的伺服器:Apache 1.3.33 + php 4.3.11 + MySQL 5.0.19-max
※我的 phpBB2 版本:phpBB 2.0.21 UTF-8 版
※我的會議室網址: http://bbs.bnw.com.tw/conference/
~倉木麻衣~
竹貓忠實會員
竹貓忠實會員
文章: 1405
註冊時間: 2004-03-21 21:00

文章 ~倉木麻衣~ »

沒有少貼
如果是修改後要看以前的資料是否有修正過來, 必須重新編輯那篇文章(不用修改直接送出)才能看到效果
那是因為舊的文章已經將解析過的代碼存到資料庫裡了, 所以只是viewtopic的話, 並無法看到修改後的改變
如果是修改之後新發表的文章, 會直接套用修正過的list判斷方式
謝絕所有私人訊息詢問外掛相關問題
有問題請直接於版上發表, 集思廣議絕對比專挑特定人士詢問來的好

竹貓禁止發表含破解相關的軟體, 違者砍文
不要跟我講別的地方都可以發, 為什麼竹貓就不行
免費不等於破解, 傻傻的搞不清楚
進藤光
星球公民
星球公民
文章: 291
註冊時間: 2005-03-16 18:48
來自: BNW 時尚資訊網
聯繫:

文章 進藤光 »

原來如此,我只是重新整理網頁而已,難怪一點用也沒有.... XD :mrgreen:

這是修正前錯誤的 HTML 碼:

代碼: 選擇全部

<ul><li>111
<br />
<ol type="1"><li>aaa</ul>
<br />
<li>222</ol>

這是修正後的 HTML 碼:

代碼: 選擇全部

<ul><li>111 
<br />
<ol type="1"><li>aaa</ol> 
<br />
<li>222</ul>
想不到只是修正一個 </ul> 與 </ul> 的小問題,竟然還要另外寫一個副程式... Orz
※架設伺服器主機:Mac mini G4-1.5GHz, 1GB RAM 三台
※架設主機作業系統:Mac OS X Server 10.4.2 Tiger
※我的上網方式:固定制 ADSL 4M/1M、3 IP
※安裝的伺服器:Apache 1.3.33 + php 4.3.11 + MySQL 5.0.19-max
※我的 phpBB2 版本:phpBB 2.0.21 UTF-8 版
※我的會議室網址: http://bbs.bnw.com.tw/conference/
頭像
心靈捕手
默默耕耘的老師
默默耕耘的老師
文章: 8540
註冊時間: 2004-04-30 01:54
來自: Taiwan

Re: [其它] list bbcode 修正

文章 心靈捕手 »

~倉木麻衣~ 寫:針對 list bbcode 判斷上的錯誤, 個人做了底下的修正
目前的測試結果都很正常, 提供給大家參考參考
這個修正很受用, 感謝分享! (:Y)
施比受有福,祝福您好運! ^_^
歡迎光臨★★心靈捕手★★ :: 討論區
https://wang5555.dnsfor.me/phpBB3/
~倉木麻衣~
竹貓忠實會員
竹貓忠實會員
文章: 1405
註冊時間: 2004-03-21 21:00

文章 ~倉木麻衣~ »

進藤光 寫:想不到只是修正一個 </ul> 與 </ul> 的小問題,竟然還要另外寫一個副程式... Orz
這個問題的關鍵是在bbencode_first_pass_pda()函式上
以這一行為例:

代碼: 選擇全部

$open_tag = array();
$open_tag[0] = "[list]";

// unordered..
$text = bbencode_first_pass_pda($text, $uid, $open_tag, "[/list]", "[/list:u]", false, 'replace_listitems');
它的作用是尋找與 [list] 最接近的 [/list], 並將這個 [/list] 置換成 [/list:u]
但是它卻忽略了在這一段 list 裡還有可能存在另外一組 list 的 open_tag
所以當 list 的層數多於2層時, 就有可能會造成判斷錯誤

之所以會將list的判斷另外獨立成一個函式
是因為修改原有的 bbencode_first_pass_pda() 並不容易, 主要是卡在 open_tag這個參數不好傳
加上個人對這個函式還不是完全的了解, 而且它還牽扯到 code 及 quote bbcode的剖析
個人沒把握能在修正 bbencode_first_pass_pda() 內容時, 還可讓 code 及 quote 完全不受影響
所以乾脆將它獨立方一個函式來處理, 而且這樣日後要還原回原始寫法也比較容易
謝絕所有私人訊息詢問外掛相關問題
有問題請直接於版上發表, 集思廣議絕對比專挑特定人士詢問來的好

竹貓禁止發表含破解相關的軟體, 違者砍文
不要跟我講別的地方都可以發, 為什麼竹貓就不行
免費不等於破解, 傻傻的搞不清楚
chiouss
竹貓忠實會員
竹貓忠實會員
文章: 1741
註冊時間: 2002-11-29 18:19

文章 chiouss »

去 bug tracker 上面喊兩下,提醒他們修正? :D
~倉木麻衣~
竹貓忠實會員
竹貓忠實會員
文章: 1405
註冊時間: 2004-03-21 21:00

文章 ~倉木麻衣~ »

去翻了一下bug tracker, 看來已經有人反應過了
http://www.phpbb.com/bugs/viewreport.php?b=180

phpBB 2.0.x版不會修正這個bug
phpBB 3.0則似乎是已經修正(尚未裝起來測試過)
謝絕所有私人訊息詢問外掛相關問題
有問題請直接於版上發表, 集思廣議絕對比專挑特定人士詢問來的好

竹貓禁止發表含破解相關的軟體, 違者砍文
不要跟我講別的地方都可以發, 為什麼竹貓就不行
免費不等於破解, 傻傻的搞不清楚
chiouss
竹貓忠實會員
竹貓忠實會員
文章: 1741
註冊時間: 2002-11-29 18:19

文章 chiouss »

~倉木麻衣~ 寫:phpBB 3.0則似乎是已經修正(尚未裝起來測試過)
我的 phpBB 3.0.B4 好像是正常的?
圖檔
進藤光
星球公民
星球公民
文章: 291
註冊時間: 2005-03-16 18:48
來自: BNW 時尚資訊網
聯繫:

文章 進藤光 »

~倉木麻衣~ 寫:去翻了一下bug tracker, 看來已經有人反應過了
http://www.phpbb.com/bugs/viewreport.php?b=180

phpBB 2.0.x版不會修正這個bug
phpBB 3.0則似乎是已經修正(尚未裝起來測試過)
應該是很少有人會用到多層的 list 吧?
我自己頂多也只用到一層,至於討論區上的【室友】則是一個也沒有使用... 我猜想應該是 list 用法太麻煩?

剛剛有人把我的 phpBB 3.0 beta 4 的 test 帳號密碼改掉了,害我無法登入管理者!真是的... 開放出來讓網友體驗,卻被駭客或某人惡搞... 乾脆把 phpBB 3.0 幹掉,等新的版本再安裝。

我個人覺得 phpBB 3.0 沒有支援【表格】真是很討厭!畢竟有許多事情畫一張表格會比較清楚,雖然用 BBcode 做表格會有不少難度,可是總比沒有要好...
※架設伺服器主機:Mac mini G4-1.5GHz, 1GB RAM 三台
※架設主機作業系統:Mac OS X Server 10.4.2 Tiger
※我的上網方式:固定制 ADSL 4M/1M、3 IP
※安裝的伺服器:Apache 1.3.33 + php 4.3.11 + MySQL 5.0.19-max
※我的 phpBB2 版本:phpBB 2.0.21 UTF-8 版
※我的會議室網址: http://bbs.bnw.com.tw/conference/
chiouss
竹貓忠實會員
竹貓忠實會員
文章: 1741
註冊時間: 2002-11-29 18:19

文章 chiouss »

進藤光 寫:剛剛有人把我的 phpBB 3.0 beta 4 的 test 帳號密碼改掉了,害我無法登入管理者!真是的... 開放出來讓網友體驗,卻被駭客或某人惡搞... 乾脆把 phpBB 3.0 幹掉,等新的版本再安裝。
1. 就算要開 admin 出來測試也記得要另外開一個,人家搞不好是要「測試」改密碼的功能啊! :mrgreen:
2. 密碼被改掉有什麼困難的?打開資料庫自己丟個 MD5 過的密碼進去不就好了 :mrgreen: :mrgreen:
(至少 2.x 是如此,3.0 有沒有改用 smd5 之類的我就不知道了 :P)
主題已鎖定

回到「phpBB 2 安裝與使用」