2010-08-18 72 views
3

林建設自己的論壇,在這裏你可以使用不同勢類型的BB碼的,其中之一是[YouTube的] [/ YouTube的]嵌入YouTube視頻,BB碼分析問題

的想法是讓傻瓜型,用戶可以輸入個全長URL或只是代碼視頻這樣

[YouTube的] http://www.youtube.com/watch?v=AJ3_kndmeCg[/youtube]
[YouTube的] http://www.youtube.com/watch?v=AJ3_kndmeCg&feature=related[/youtube] [YouTube的] AJ3_kndmeCg [/ YouTube的]

這裏是我的代碼,獲取代碼出了個全長的URL,

<?php 
$getpost=$_POST['post']; 
$getpost=preg_replace("'\[youtube\].*?=(.*?)&.*?\[/youtube\]'is",'yt link is \\1',$getpost); 
$getpost=preg_replace("'\[youtube\].*?=(.*?)\[/youtube\]'is",'yt link is \\1',$getpost); 
$getpost=preg_replace("'\[youtube\](.*?)\[/youtube\]'is",'yt link is \\1',$getpost); 
?> 

的結果是:

YT鏈接AJ3_kndmeCg
YT鏈接AJ3_kndmeCg
YT鏈接AJ3_kndmeCg

如果我只想嵌入3個youtube視頻,則可以完美運行

但是,如果我想嵌入6個這樣的YouTube視頻:

[YouTube的] http://www.youtube.com/watch?v=AJ3_kndmeCg[/youtube] [YouTube的] http://www.youtube.com/watch?v=AJ3_kndmeCg&feature=related[/youtube] [YouTube的] AJ3_kndmeCg [/ YouTube的]
[YouTube的] http://www.youtube.com/watch?v=AJ3_kndmeCg[/youtube] [YouTube的] http://www.youtube.com/watch?v=AJ3_kndmeCg&feature=related[/youtube] [YouTube的] AJ3_kndmeCg [/ YouTube的]

的結果是:

YT鏈接AJ3_kndmeCg
YT鏈接AJ3_kndmeCg [/ YouTube的]
YT鏈接AJ3_kndmeCg
YT鏈接http://www.youtube.com/watch?v=AJ3_kndmeCg
[YouTube的] AJ3_kndmeCg

你看到^^標籤仍然存在在兩行和其中一行顯示完整長度的URL,

回答

1

哇,這是一個真正的艱難的正則表達式寫。

得到它給你一個:

$getpost=preg_replace('@\[youtube\].*?(?:v=)?([^?&[]+)(&[^[]*)?\[/youtube\]@is', 
      'yt link is \\1', $getpost); 

這會爲你提供的所有情況。如果鏈接以'v ='以外的部分開頭(例如,'http://www.youtube.com/watch?foo=bar&v=AJ3_kndmeCg'),將會使用而不是

享受!

+0

感謝,作品真的很好,不管用戶有多少視頻嵌入,這是傻瓜型的用戶,非常感謝您 – lawrence 2010-08-18 23:34:42

+2

無論正則表達式如何聰明是(我愛黑客正則表達式我自己!),這與開發者的白癡證明相反: -/ – nicomen 2010-08-18 23:54:47

4

我寧願使用現有的BBCode解析庫,如http://www.christian-seiler.de/projekte/php/bbcode/index_en.html,它也允許您定義自己的bb標籤,並將它們轉換爲您需要的HTML。

;)

+2

這應該是可接受的解決方案。爲什麼重新發明輪子? – 2010-08-18 23:52:14

+0

謝謝!當你晚上睡着的時候,小馬託尼不會拜訪你。 – 2012-04-20 11:56:03