PALMisLIFE 討論區

標題: [PHP 筆記] UBB Code 轉換 [列印本頁]

作者: 阿輝    時間: 2004-8-19 16:33
標題: [PHP 筆記] UBB Code 轉換
感謝洗洗臉同學提供

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

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



  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. ?>
複製代碼

作者: 阿輝    時間: 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 />會被解成 &lt;b&gt; 12345[/b][b]6789 &lt;/b&gt;<br /></p><p>只有最外層被解一次... =''=</p>
作者: tales    時間: 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]]
作者: 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\]/", "&lt;b&gt;\\1&lt;/b&gt;", $var );

[ Last edited by cclien on 2004-8-21 at 00:25 ]




歡迎光臨 PALMisLIFE 討論區 (http://f.pil.tw/) Powered by Discuz! X2.5