使用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论坛帖子里面的视频可以在手机浏览器或微信中访问了!