我需要解析和获取youtube视频id从youtube url中的智能tpl文件。现在,我正在使用插件文件来实现这一点,使用php preg_match函数。但是我想使用Smarty正则表达式来解析,而不是上面的方法。
当我通过智能循环获得视频URL时,我无法在php中解析它并分配smarty。目前,我正在使用这段代码从plugin文件中获得视频id。
if ($videoURL) {
if (preg_match('%(?:youtube(?:-nocookie)?\.com/(?:[^/]+/.+/|(?:v|e(?:mbed)?)/|.*[?&]v=)|youtu\.be/)([^"&?/ ]{11})%i', $videoURL, $match)) {
$video_id = $match[1];
}
if (false !== $video_id) {
return $video_id;
}
return false;
}我不知道如何将这个preg_match转换成智能。有人能帮我解决这个问题吗?
发布于 2013-08-18 01:47:21
你最好的选择是用插件(特别是改性剂。 )扩展Smarty。
您可以遵循这个讨论这里,找出从youtube URL中获取ID的最佳方法;实际上,使用regex来解释不同类型的URL是非常棘手的(因此,上面有大量的表达式)。
一个例子应该是这样的:
<?php
function smarty_modifier_youtubeID($string) {
parse_str( parse_url( $url, PHP_URL_QUERY ), $my_array_of_vars );
return $my_array_of_vars['v'];
}然后将上面的内容放在名为modifier.youtube.php的智能插件/目录中。然后继续在for循环中使用它(在模板文件中),如so {$value|youtubeID}
另一种选择,我觉得你在找你,就是做这样的事:
{$value|regex_replace:"/^(?:http(?:s)?:\/\/)?(?:www\.)?(?:youtu\.be\/|youtube\.com\/(?:(?:watch)?\?(?:.*&)?v(?:i)?=|(?:embed|v|vi|user)\/))([^\?&\"'>]+)/":'$1'} 上面的URL将替换为视频ID (假设$value仅由一个youtube URL组成,没有其他数据,否则您将不得不修改表达式)。
https://stackoverflow.com/questions/18286203
复制相似问题