gpt4 book ai didi

php - 解析文本中的 bbcode youtube 标签并替换为包含视频 ID 的 html

转载 作者:行者123 更新时间:2023-12-04 07:07:28 24 4
gpt4 key购买 nike

我正在建立一个博客,应该像这样解析 bbcode 标签:

输入:<youtube=http://www.youtube.com/watch?v=VIDEO_ID&feature=channel>输出:

<object width="400" height="245">
<param name="movie" value="http://www.youtube- nocookie.com/v/VIDEO_ID&hl=en&fs=1&rel=0&showinfo=0"></param>
<param name="allowFullScreen" value="true"></param><param name="allowscriptaccess" value="always"></param>
<embed src="http://www.youtube-nocookie.com/v/VIDEO_ID&hl=en&fs=1&rel=0&showinfo=0" type="application/x-shockwave-flash" allowscriptaccess="always" allowfullscreen="true" width="400" height="245"></embed>
</object>

到目前为止,我的函数非常简单,因为我卡在了最简单的部分!现在,我有一个主进程函数,它调用不同的进程函数。在这种情况下,其中之一是 processYouTubeVideos()。所以我这样称呼它:
$str = eregi_replace('\<youtube=([^>]*)\>', processYouTubeVideos("\\1"), $str);

processYouTubeVideos() 完美地接收来自 youtube 标签内部的 URL,但出于某种原因,当使用 expand() (或 split)时,从未找到分隔符。即使使用像“u”或“tube”这样的测试值......
function processYouTubeVideos ($str) {

$params = explode("?", $str);
$params = explode("&", $params[1]);

return $params[0];

}

最佳答案

尝试:

$str = preg_replace('/<youtube=([^>]*)>/e', 'processYouTubeVideos("$1")', $str);

您尝试运行的代码将不起作用,因为将在目标模式而不是输出上调用输出字符串上的函数。这意味着您要按字面意思向函数发送 "\1"。添加 var_dump($str);到函数的开头并尝试再次运行您的代码,您会清楚地看到这一点。

preg_replace有一个特殊的标志“e”,您可以使用它在每次进行替换时执行一个函数。这是通过在标记位置($1)插入子模式然后运行类似 eval() 的东西来实现的。或 create_function()在代码上执行它并检索结果。然后将其发送回 preg_replace()并进行实际更换。

关于php - 解析文本中的 bbcode youtube 标签并替换为包含视频 ID 的 html,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/908167/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com