Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/php/258.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Php 从smarty模板中的youtube url获取youtube视频id?_Php_Regex_Preg Match_Smarty_Smarty2 - Fatal编程技术网

Php 从smarty模板中的youtube url获取youtube视频id?

Php 从smarty模板中的youtube url获取youtube视频id?,php,regex,preg-match,smarty,smarty2,Php,Regex,Preg Match,Smarty,Smarty2,我需要从smarty tpl文件中的youtube url解析并获取youtube视频id。现在,我使用插件文件来实现这一点,使用php preg_match函数。但是我想使用Smarty正则表达式来解析,而不是使用上面的方法 由于我通过smarty循环获取视频URL,所以我无法在php中解析它并在smarty中分配。目前我正在使用这段代码从smarty的PHP插件文件中获取视频id if ($videoURL) { if (preg_match('%(?:youtube

我需要从smarty tpl文件中的youtube url解析并获取youtube视频id。现在,我使用插件文件来实现这一点,使用php preg_match函数。但是我想使用Smarty正则表达式来解析,而不是使用上面的方法


由于我通过smarty循环获取视频URL,所以我无法在php中解析它并在smarty中分配。目前我正在使用这段代码从smarty的PHP插件文件中获取视频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
转换为smarty。有人能帮我解决这个问题吗?

您最好的选择是使用插件扩展Smarty,特别是

您可以按照此讨论找出从youtube URL获取ID的最佳方法;事实上,仅使用正则表达式来解释不同类型的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']; 
}

以上内容将用视频ID替换URL(假设$value仅由youtube URL组成,没有其他数据,否则您将不得不修改表达式。)

您的最佳选择是使用插件扩展Smarty,特别是

您可以按照此讨论找出从youtube URL获取ID的最佳方法;事实上,仅使用正则表达式来解释不同类型的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']; 
}

以上内容将用视频ID替换URL(假设$value仅由youtube URL组成,没有其他数据,否则您将不得不修改表达式。)

Smarty只是用于输出数据,而不是用于处理数据。我知道。但有时我们必须在smarty循环中处理数据。我们还可以使用smarty修饰符,如
regex\u replace
或类似的东西来实现这一点。但我真的不擅长正则表达式。你能展示一下你已经尝试过的,解释一下为什么它不能满足你的要求吗?“我不能用php解析它,也不能用smarty赋值。”为什么不能?smarty只是用于输出数据,而不是处理数据。我知道。但有时我们必须在smarty循环中处理数据。我们还可以使用smarty修饰符,如
regex\u replace
或类似的东西来实现这一点。但我真的不擅长正则表达式。你能展示一下你已经尝试过的,并解释为什么它不能满足你的要求吗?“我不能用php解析它,也不能用smarty赋值。”为什么不能?