2013-03-14 69 views
1

我覺得自己像一個業餘人士問這個問題,但我一直在這個問題上掙扎了很長時間,無法解決問題。PHP的問題preg_replace()

我正在製作一個嵌入式YouTube視頻和一個富文本編輯器的論壇。我需要一個函數將HTML標記轉換爲BBCode,另一個將BBCode轉換回HTML。

BB代碼爲HTML

$message = (get message from database); 
$A = '/\[youtube](.*?)\[\/youtube\]/is'; 
$B = '<object type="application/x-shockwave-flash" data="http://www.youtube.com/v/$1" width="425" height="350"><param name="movie" value="http://www.youtube.com/v/$1"><param name="wmode" value="transparent"></object>'; 
preg_replace($A, $B, $message); 

我需要逆轉這一過程中,把HTML到BB代碼的腳本。如果有人能幫助我,我會非常感激,或者建議一個更簡單的方法,如果存在的話,或者甚至可以提供一些洞察問題的鏈接。

謝謝。

+0

,所以還是從B $至$ A? – Popnoodles 2013-03-14 00:13:25

+0

基本上,是的!對不起,使其複雜化:P – Tom 2013-03-14 00:15:19

+0

**不要使用正則表達式來解析HTML **。您無法可靠地使用正則表達式解析HTML。只要HTML從你的期望改變,你的代碼就會被破壞。有關如何使用PHP模塊正確解析HTML的示例,請參閱http://htmlparsing.com/php.html。 – 2013-03-14 03:23:53

回答

1

試試這個

$message = 'Some text 
<object type="application/x-shockwave-flash" data="http://www.youtube.com/v/abcdefgh" width="425" height="350"><param name="movie" value="http://www.youtube.com/v/abcdefgh"><param name="wmode" value="transparent"></object> 
More text 
<object type="application/x-shockwave-flash" data="http://www.youtube.com/v/abcdefgh" width="425" height="350"><param name="movie" value="http://www.youtube.com/v/abcdefgh"><param name="wmode" value="transparent"></object> 
Even more text'; 

echo preg_replace("/\<object.*?youtube\.com\/v\/(.*?)\".*?object\>/ims", "[youtube]$1[/youtube]", $message); 
+0

哦,很酷,它的作品。但我可以問一下它的工作原理嗎?對象標籤將在用戶的消息中。它可能會干擾他們的任何其他內容,還是僅適用於消息中的對象標記? – Tom 2013-03-14 00:27:04

+0

是的,它會刪除其他內容。如果該代碼是更大文本字符串的一部分,則需要調整。 – Popnoodles 2013-03-14 00:44:14

+0

很好!我可以調整它。爲此非常感謝! :) – Tom 2013-03-14 00:46:27