2013-03-14 92 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