日期:2014-05-17  浏览次数:20436 次

discuz的ismozilla函数
这么晚了,不知道还有没有人在,小弟半夜遇到一个问题,百思不得其解,请各位路过大神指点一二,不胜感激。

discuz有个函数是将html代码转换成ubb代码的,看代码

function html2bbcode($text) {
$text = strip_tags($text, '<table><tr><td><b><strong><i><em><u><a><div><span><p><strike><blockquote><ol><ul><li><font><img><br><br/><h1><h2><h3><h4><h5><h6><script>');

if(ismozilla()) {
$text = preg_replace("/(?<!<br>|<br \/>|\r)(\r\n|\n|\r)/", ' ', $text);
}
只列出了一部分代码。

上面的ismozilla函数是用来判断火狐浏览器的,代码如下

function ismozilla() {
$useragent = strtolower($_SERVER['HTTP_USER_AGENT']);
if(strpos($useragent, 'gecko') !== FALSE) {
preg_match("/gecko\/(\d+)/", $useragent, $regs);
return $regs[1];
}
return FALSE;
}

大家看到红色部分的代码了吧,不明白的是,为什么火狐浏览器就要把换行全部干掉?这到底是为什么?

我写了一个计划任务触发的发帖程序,估计是被其他东西触发了,发出来的帖子经过那个函数转换之后,全部没有换行。

在使用html2bbcode函数之前这样定义了:
$_SERVER['HTTP_USER_AGENT'] = 'Mozilla/5.0 (Windows NT 6.1) AppleWebKit/535.7 (KHTML, like Gecko) Chrome/16.0.912.75 Safari/535.7 360EE';
但是发出来的帖子还是没有换行,也不知道如何解决才好,说也奇怪,discuz定义了这个函数,可是整站却没有一处地方用到,奇怪得很。

------解决方案--------------------
写码的不止一个人。做的走了,来的人改了。到最后就是成了码渣了,横流在码中央。搜索一下,没有用到,只能说明,重构的时候忘了去掉了
------解决方案--------------------
这是一个将 HTML 标记转换成 BBCode 的函数,在 discuz 中没有地方需要这种功能

你若怀疑是这个函数作怪,那么就将红色的部分注释掉
------解决方案--------------------
问题在于:虽然你修改了那个函数,却发现问题依旧
------解决方案--------------------
可能是 为css做的 判断!!!