Discuz的wap论坛出现"未知文件格式"的解决方法
前些日子玩discuz论坛(utf-8编码),因为论坛是智能手机相关的,通过手机端的访问的概率很高,因此dz的wap必须保证正常工作,使用中发现:symbian系统访问出现”未知文件格式“;wm5/6系统访问出现”此页包含错误,无法显示“.
到官方论坛搜索了相关问题,发现很多人遇到这样的问题,但是官方却没有给出解决方法,郁闷不已.
经过研究和测试,发现其实问题很简单,原来是wap的字符窜截取的问题(字符截取导致乱码,手机系统的字库有限,就报错).
原创转载请注明出自http://blog.wuqihua.com
修改 wap/include/global.func.php
里面的函数 wapcutstr()
原函数
function wapcutstr($string, &$length) {
$strcut = ”;
if(strlen($string) > $length) {
for($i = 0; $i < $length – 3; $i++) {
$strcut .= ord($string[$i]) > 127 ? $string[$i].$string[++$i] : $string[$i];
}
$length = $i;
return $strcut.’ ..’;
} else {
return $string;
}
}
替换为
function wapcutstr($str,&$length){
$suffix=TURE; //是否加…
$start=0; //从左边0开始
$charset=”utf-8″; //字符集
if (function_exists(‘mb_substr’)) {
$more = (mb_strlen($str) > $length) ? TRUE : FALSE;
$text = mb_substr($str, $start, $length, $charset);
if($suffix && $more) $text.=” …”;
} elseif (function_exists(‘iconv_substr’)) {
$more = (iconv_strlen($str) > $length) ? TRUE : FALSE;
$text = iconv_substr($str, $start, $length, $charset);
if($suffix && $more) $text.=” …”;
} else {
$re['gb2312'] = “/[\x01-\x7f]|[\xb0-\xf7][\xa0-\xfe]/”;
preg_match_all($re[$charset], $str, $match);
$text = join(“”,array_slice($match[0], $start, $length));
if (count($match[0])>$length) {
$more = TRUE;
$text = join(“”,array_slice($match[0],0,$length));
} else {
$more = FALSE;
$text = join(“”,array_slice($match[0],0,$length));
}
if($suffix && $more) $text.=” …”;
}
return $text;
}
另外wap/include/forum.inc.php my.inc.php pm.inc.php search.inc.php 里面用到了cutstr函数也会导致问题的出现,请做相应处理即可.

留下评论 | Trackback 这篇文章有5个评论.