PALMisLIFE 討論區
標題:
[PHP 筆記] UBB Code 轉換
[列印本頁]
作者:
阿輝
時間:
2004-8-19 16:33
標題:
[PHP 筆記] UBB Code 轉換
感謝洗洗臉同學提供
貼上來順便當作筆記,畢竟這蠻常用到的
在文章任意處加上 (我習慣放最前面)
<?
function ubbreplace( $var )
{
# Strip any HTML tags
$var = preg_replace( "/<\/?[^\\<>|\/]*>/", "", $var );
# 粗體 / 底線 / 斜體 UBB 標記
$var = preg_replace( "/\[b\](.+)\[\/b\]/", "<b>\\1</b>", $var );
$var = preg_replace( "/\[u\](.+)\[\/u\]/", "<u>\\1</u>", $var );
$var = preg_replace( "/\[i\](.+)\[\/i\]/", "<i>\\1</i>", $var );
# UBB 連結標記
$var = preg_replace( "/\[url=(.+)\](.+)\[\/url\]/", "<a href=\"\\1\">\\2</a>", $var );
# UBB 字型大小標記
$var = preg_replace( "/\[size=(.+)\](.+)\[\/size\]/", "<font size=\"\\1\">\\2</font>", $var );
# Email 地址自動連結
$var = preg_replace( "/(([a-zA-Z0-9_-]+)@([a-zA-Z0-9_-]+)([\.a-zA-Z0-9_-]+))/", "<a href=\"mailto:\\2@\\3\\4\">\\1</a>", $var );
return $var;
}
?>
複製代碼
然後將要 Decode 的字串或變數包上 ubbreplace() 即可,建議可以跟 nl2br 函示並用
範例
<?php
echo ubbreplace(nl2br($row_blog['message']));
?>
複製代碼
作者:
阿輝
時間:
2004-8-20 13:41
標題:
Re: [PHP 筆記] UBB Code 轉換
這組 code 會自暴
問題 1: 只會解碼一層...
問題 2: 會影響到 HTML 語法...
作者:
阿輝
時間:
2004-8-20 19:50
標題:
Re: [PHP 筆記] UBB Code 轉換
<p>發現如果有多重 UBB code 則會只解最前跟最後的... 中間都會被略過<br /><br />例如 [b]12345[/b][b]6789[/b]<br />會被解成 <b> 12345[/b][b]6789 </b><br /></p><p>只有最外層被解一次... =''=</p>
作者:
tales
時間:
2004-8-20 23:34
標題:
Re: [PHP 筆記] UBB Code 轉換
正規表達式實在太難了 @_@
而且每一個 Script 解譯引擎的處理方式好像還都不太一樣
[b]12345[/b][b]6789[/b] ← 這個例子來講,
如果比對是從最外層開始的話,
在置換字串的時候,先檢查匹配到的字串裡頭,
還有沒有 [b] 或 [/b] 的標籤應該就可以了吧 ....
不過這個標籤其實只要單純的把 [b] 換成 <b> ...
[[i] Last edited by tales on 2004-8-20 at 23:37 [/i]]
作者:
cclien
時間:
2004-8-21 00:17
標題:
Re: [PHP 筆記] UBB Code 轉換
喔 路邊撿來的 code 果然貓掉
這個是 greedy match 的關係,會取範圍最大的來 match
改用 nongreedy match 就行了
加個問號即可
$var = preg_replace( "/\[b\](.+<font color="red">?</font>)\[\/b\]/", "<b>\\1</b>", $var );
[
Last edited by cclien on 2004-8-21 at 00:25
]
歡迎光臨 PALMisLIFE 討論區 (http://f.pil.tw/)
Powered by Discuz! X2.5