在自定义标记之间查找字符串并使用它执行某些操作

时间:2011-04-19 02:57:07

标签: php string str-replace

在我的新项目中,会员可以使用我的YouTube API,它会生成如下标签,以便他们在任何想要的文字区域中使用它:

<ymedia>http://www.youtube-nocookie.com/v/qQG0XfU-bFs</ymedia>

我希望我的PHP个人资料页面在<ymedia></ymedia>之间使用字符串,并使用$ymstring为从ymedia标记收集的字符串生成类似的代码:

<?php
$u_agent = $_SERVER[''HTTP_USER_AGENT''];
if(preg_match(''/Opera/i'',$u_agent)){
<object width="320" height="240" data="".$ymstring."?fs=1&amp;hl=en_US&amp;rel=0"><param name="movie" value="".$ymstring."?fs=1&amp;hl=en_US&amp;rel=0" /><param name="allowFullScreen" value="true" /><param name="wmode" value="transparent" /><param name="bgColor" value="#ffffff" /><param name="flashvars" value="vu=".$ymstring."?fs=1&amp;hl=en_US&amp;rel=0" /></object>
} else {
<object width="320" height="240"><param name="movie" value="".$ymstring."?fs=1&amp;hl=en_US&amp;rel=0"></param><param name="allowFullScreen" value="true"></param><param name="allowscriptaccess" value="always"></param><embed src="".$ymstring."?fs=1&amp;hl=en_US&amp;rel=0" type="application/x-shockwave-flash" allowscriptaccess="always" allowfullscreen="true" width="320" height="240"></embed></object>
}
?>

基本上,我正在尝试在$ string中找到所有ymedia标签,并将其替换为上面针对Opera或其他浏览器的youtube编码。

2 个答案:

答案 0 :(得分:0)

这应该有效:

preg_match("/<ymedia>(.*?)<\/ymedia>/", $Input, $Matches);

然后,您的结果将显示在$Matches[1]中,您可以将其作为$ymstring传递。

答案 1 :(得分:0)

为简单起见,您想使用preg_replace_callback:

$html = preg_replace_callback('#<ymedia>(http://.*?)</ymedia>#',
         "ymedia_cb", $html);

function ymedia_cb($matches) {
    $url = $matches[1];

    return "<object src=$url>";
}

显然,您将使用if / else构造返回适当且完整的对象标记。