PALMisLIFE 討論區

搜索
鹹魚爸魅力四射舞蹈教室
查看: 2301|回復: 4
打印 上一主題 下一主題

[PHP 筆記] UBB Code 轉換

[複製鏈接]

3867

主題

126

好友

2625

積分

  • TA的每日心情

    2011-4-12 00:15
  • 簽到天數: 3 天

    連續簽到: 2 天

    [LV.2]偶爾看看I

    文章
    35006
    跳轉到指定樓層
    1#
    發表於 2004-8-19 16:33 |只看該作者 |倒序瀏覽
    感謝洗洗臉同學提供

    貼上來順便當作筆記,畢竟這蠻常用到的

    在文章任意處加上 (我習慣放最前面)



    1. <?
    2. function ubbreplace( $var )
    3. {
    4.   # Strip any HTML tags
    5.   $var = preg_replace( "/<\/?[^\\<>|\/]*>/", "", $var );

    6.   # 粗體 / 底線 / 斜體  UBB 標記
    7.   $var = preg_replace( "/\[b\](.+)\[\/b\]/", "<b>\\1</b>", $var );
    8.   $var = preg_replace( "/\[u\](.+)\[\/u\]/", "<u>\\1</u>", $var );
    9.   $var = preg_replace( "/\[i\](.+)\[\/i\]/", "<i>\\1</i>", $var );

    10.   # UBB 連結標記
    11.   $var = preg_replace( "/\[url=(.+)\](.+)\[\/url\]/", "<a href=\"\\1\">\\2</a>", $var );

    12.   # UBB 字型大小標記  
    13.    $var = preg_replace( "/\[size=(.+)\](.+)\[\/size\]/", "<font size=\"\\1\">\\2</font>", $var );

    14.   # Email 地址自動連結
    15.   $var = preg_replace( "/(([a-zA-Z0-9_-]+)@([a-zA-Z0-9_-]+)([\.a-zA-Z0-9_-]+))/", "<a href=\"mailto:\\2@\\3\\4\">\\1</a>", $var );
    16.    
    17.   return $var;
    18. }

    19. ?>
    複製代碼


    然後將要 Decode 的字串或變數包上 ubbreplace() 即可,建議可以跟 nl2br 函示並用

    範例


    1. <?php
    2. echo ubbreplace(nl2br($row_blog['message']));
    3. ?>
    複製代碼
    分享淘帖0 分享分享0 收藏收藏0 頂0 踩0
    阿輝攝影記錄服務 | 婚禮記錄 | 活動拍攝
    http://www.giorno.tw/

    3867

    主題

    126

    好友

    2625

    積分

  • TA的每日心情

    2011-4-12 00:15
  • 簽到天數: 3 天

    連續簽到: 2 天

    [LV.2]偶爾看看I

    文章
    35006
    2#
    發表於 2004-8-20 13:41 |只看該作者

    Re: [PHP 筆記] UBB Code 轉換

    這組 code 會自暴

    問題 1: 只會解碼一層...
    問題 2: 會影響到 HTML 語法...
    阿輝攝影記錄服務 | 婚禮記錄 | 活動拍攝
    http://www.giorno.tw/
    回復

    使用道具 舉報

    3867

    主題

    126

    好友

    2625

    積分

  • TA的每日心情

    2011-4-12 00:15
  • 簽到天數: 3 天

    連續簽到: 2 天

    [LV.2]偶爾看看I

    文章
    35006
    3#
    發表於 2004-8-20 19:50 |只看該作者

    Re: [PHP 筆記] UBB Code 轉換

    <p>發現如果有多重 UBB code 則會只解最前跟最後的... 中間都會被略過<br /><br />例如 [b]12345[/b][b]6789[/b]<br />會被解成 &lt;b&gt; 12345[/b][b]6789 &lt;/b&gt;<br /></p><p>只有最外層被解一次... =''=</p>
    阿輝攝影記錄服務 | 婚禮記錄 | 活動拍攝
    http://www.giorno.tw/
    回復

    使用道具 舉報

    169

    主題

    0

    好友

    4260

    積分

    該用戶從未簽到

    文章
    5723
    4#
    發表於 2004-8-20 23:34 |只看該作者

    Re: [PHP 筆記] UBB Code 轉換

    正規表達式實在太難了 @_@
    而且每一個 Script 解譯引擎的處理方式好像還都不太一樣
    [b]12345[/b][b]6789[/b] ← 這個例子來講,
    如果比對是從最外層開始的話,
    在置換字串的時候,先檢查匹配到的字串裡頭,
    還有沒有 [b] 或 [/b] 的標籤應該就可以了吧 ....

    不過這個標籤其實只要單純的把 [b] 換成 &lt;b>  ...

    [[i] Last edited by tales on 2004-8-20 at 23:37 [/i]]
    - 自以為是新手所以被排擠,是成為白爛的開始。
    - 自以為了不起,是大犯眾怒的開始。
    - 強調問題笨或自己笨,是最笨的發問方式。

    回復

    使用道具 舉報

    27

    主題

    0

    好友

    620

    積分

    豬公村的豬應台

    該用戶從未簽到

    文章
    643
    5#
    發表於 2004-8-21 00:17 |只看該作者

    Re: [PHP 筆記] UBB Code 轉換

    喔 路邊撿來的 code 果然貓掉

    這個是 greedy match 的關係,會取範圍最大的來 match
    改用 nongreedy match 就行了

    加個問號即可

    $var = preg_replace( "/\[b\](.+<font color="red">?</font>)\[\/b\]/", "&lt;b&gt;\\1&lt;/b&gt;", $var );

    [ Last edited by cclien on 2004-8-21 at 00:25 ]
    豬公村的豬應台啊,豬公應不應該台啊~
    回復

    使用道具 舉報

    您需要登錄後才可以回帖 登錄 | 免費註冊

    與站長聯繫| PALMisLIFE 掌上生活      下載:更快、更棒、更好玩

    GMT+8, 2024-9-21 00:41 , Processed in 0.051893 second(s), 31 queries , Gzip On.

    Powered by Discuz!

    © 2001-2012 Comsenz Inc. style by eisdl

    回頂部