解决discuz论坛里视频无法在手机或微信里播放

发布日期:2017-10-15 浏览量:2683 次

使用discuz论坛,如果帖子里面含有flash视频,当在手机上浏览的时候,并不能显示视频出来,而是直接显示视频的原URL地址。下面,我们就来解决这个问题。

注意:我升级了discuz论坛程序,当前版本是3.3,别改错了!

打开source/function/function_discuzcode.php,大概在205行

if(strpos($msglower, '[/flash]') !== FALSE) {
    $message = preg_replace("/\[flash(=(\d+),(\d+))?\]\s*([^\[\<\r\n]+?)\s*\[\/flash\]/is", "[media]\\4[/media]", $message); }

通过这段可以发现,论坛代码只是把[flash]标签中的内容直接显示出来了,我们只要进行相应的修改即可:

if(strpos($msglower, '[/flash]') !== FALSE) {
           $message = preg_replace_callback(
                    "/\[flash(=(\d+),(\d+))?\]\s*([^\[\<\r\n]+?)\s*\[\/flash\]/is", 'discuzcode_callback_parseflash_h5', $message); }

在当前页面最后,新增加函数:discuzcode_callback_parseflash_h5

function discuzcode_callback_parseflash_h5($matches) {
    return '< iframe style="width:100%;height:280px;" src="'.getH5Url($matches[4]).'" data-ke-src="'.getH5Url($matches[4]).'" scrolling="no" frameborder="0" allowfullscreen>no iframe';
}

再通过解析出来的视频地址,添加转换函数:getH5Url

function getH5Url($url) {
    if (stripos($url, 'youku') !== false) {
        $pattern = "/id_(.*?)\.html|sid\/(.*?)\/v/";
        preg_match($pattern, $url, $result);
        if($result){
            $url = 'http://player.youku.com/embed/' . ($result[1] ?: $result[2]);
        }
    } elseif (stripos($url, 'qq.com') !== false) {
        $pattern = "/vid=(.*?)\&/";
        preg_match($pattern, $url, $result);
        if($result){
            $url = 'https://v.qq.com/iframe/player.html?vid='.($result[1] ?: $result[2]).'&tiny=0&auto=0';
        }
    }
    return $url;
}

上面的代码里,我只使用了优酷和QQ视频,其他网站的大家只要找到转换规律自己添加上即可。

最后后,要想discuz论坛的微社区中也能正常播放视频的话,还需要修改source/plugin/mobile/discuzcode.func.php文件中的129行,找到如下代码并注释掉。

if(strpos($msglower, '[/flash]') !== FALSE) {
    $message = preg_replace_callback("/\[flash(=(\d+),(\d+))?\]\s*([^\[\<\r\n]+?)\s*\[\/flash\]/is", 'mobile_discuzcode_callback_bbcodeurl_4', $message); }

记住,修改前记得备份文件!!!

至此,discuz论坛帖子里面的视频可以在手机浏览器或微信中访问了!