好的,我一直在通過一組字符串替換bbcode樣式標籤在我的論壇中,取代[b]
和[i]
等是相當簡單的,因爲我可以直接替換它們而沒有問題。bbcode樣式標籤與preg
有兩個標籤給我帶來了問題,因爲我需要對它們做更復雜的處理。 [quote]
和[url]
都很好,但是,我想給用戶選擇[quote=person_to_quote]
和[url=URL]link text[/url]
,[quote=]
標籤也需要能夠嵌套!
所以我需要能夠替換開始標記[quote=
然後保留字符串添加]
顯示報價然後結束[/quote]
。我可以更換批發標籤並保留=person
的罰款,但這是由我作弊和簡單地添加結束標籤的文本。我真的很想能夠做的就是將=
和]
之間的所有內容都存儲起來,以便我可以單獨處理它。
目前我使用一個數組,simplye從而取代了嵌入式文本:
"[quote=" is replaced by "<span class=\"quote\">[Quote: ",
,只是拍着非替換文本回到它的結束,這是醜陋的,但。我希望能夠做的就是把代碼說[quote=person]some text here[/quote]
,使之成爲:
"[quote=" is replaced by "<span class=\"quote\">$person says: ",
其中$的人會存儲這個人的名字,因此它可以被動態替換的變量。
與網址同樣地,我想更換[url=link]link text[/url]
,使之能夠接受的URL和內嵌更換所以輸出:
"[url=" is replaced by "<a href=$URL>"
與HTML標籤已經關閉,這意味着剝離url出來,存儲它然後替換它之後。
那麼,我用什麼方法來刪除=
和關閉]
標籤之間的文本,所以我傳入替換數組可以傳遞出來,並相應地修改。另外,我並不擔心嵌套在quotes
中,因爲span類樣式會照顧到這一點,但是我確實需要一個可以處理任意數量的引號標籤的函數!請仔細閱讀。
編輯:
只是一個更新,我已經解決了我想做的事情,我修改了代碼webbiedave給了我和它的工作原理:
$output = preg_replace_callback(
'/\[quote=([^\]]+)?\]/',
create_function(
'$matches',
'return \'<span class="quote">\'.$matches[1].\' says: \';'
),
$comment);
然後關閉標籤回升無論如何,通過我的普通標籤替換搜索。
嗯,如果我讀的是正確的替換整個配對標籤?輸出很好,因爲它給了我一個跨度類,但它不需要搜索結束標記?由於兩個標籤都被替換,它正在改變嵌套,並且它不能在嵌套引號上工作。結束標籤可以替換爲第二遍,因此不需要包含。所以我需要改變它,只用'替換'[quote = chris]'部分Chris說
'爲結束標記添加另一個替換將會消除嵌套問題。 – TooManyCooks 2010-04-01 16:43:02
啊,謝謝,我讀的時候有點不對,它正在搜索標籤之間的文本,但沒有替換結束標籤,我已經採取了一些措施並修改了它。但在正確的方向點+1! – TooManyCooks 2010-04-01 16:57:45
很高興我能幫到你。我只想說明如何使用這個函數來解決你的問題,而不是給你一個完整的解決方案。 – webbiedave 2010-04-01 16:59:35