現在一些主流的論壇或 Blog 回應,也是用 BBCode 作為更改文字式樣的語法。因為 BBCode 一般上只可以定義粗體、斜體、加底線、文字顏色及插入超連結等,而不可以插入 html tags 及 javascript,以下是用 PHP 製作 BBCode 函式的方法。
首先第一步是要將 html tags 轉換,例如 '<' 轉換成 '<',這個可以用 htmlentities() 函式實現:
PHP:
-
<?php
-
function bbcode_convert($string){
-
}
-
?>
然後便要編寫字體式樣的部份,包括有[b]、[i]、[u]、[ur] 及 [img],這裡開始要用正規表達式來做:
PHP:
-
<?php
-
function bbcode_convert($string){
-
// 移除 HTML tags
-
-
// 處理 [b] 及 [/b] 的粗體字
-
// 處理 [i] 及 [/i] 的斜體字
-
// 處理 [u] 及 [/u] 的底線字
-
-
// [url] 超連結
-
// [url=url] 超連結
-
-
// [img] 圖片
-
-
return $string;
-
}
-
?>
現在已經完成了最基本的 BBCode,但可以將以上程式碼簡化,還可以選進執行效能。以上總共呼叫了 6 次 preg_replace() 函式,而實際上 preg_replace() 是可以用 array 作為搜索字串及替換字串的,所以可以改為只呼叫 preg_replace() 函式兩次,那麼程式碼會這樣:
PHP:
-
<?php
-
function bbcode_convert($string){
-
// 移除 HTML tags
-
-
'/\[b\](.*?)\[\/b\]/is',
-
'/\[i\](.*?)\[\/i\]/is',
-
'/\[u\](.*?)\[\/u\]/is',
-
'/\[url\=(.*?)\](.*?)\[\/url\]/is',
-
'/\[url\](.*?)\[\/url\]/is',
-
'/\[img\](.*?)\[\/img\]/is'
-
);
-
-
'<strong>$1</strong>',
-
'<em>$1</em>',
-
'<u>$1</u>',
-
'<a href="$1">$2</a>',
-
'<a href="$1">$1</a>',
-
'<img src="$1" />'
-
);
-
-
}
-
?>
這個 BBCode 函式已經大致上完成,你可以按照自己的需要加入各種語法,原理與以上的做法相同。
我有用上面寫的語法,但是繁體字都變成亂碼了!!!!這是什麼原因呢
Comment by guh — August 15, 2007 @ 4:55 pm