登录 注册

登录

问题 ja-news 1.3.1字节截断乱码问题

更多
2008年07月24日 10:47 - 2008年07月24日 12:31 #1 作者: yi_xiao
我安装了JA的模板,并且启用了Ja-news模块,但是发现截断符有问题,通过Joomla之门找到了其中一个解决方法( www.autoit.cn/forum/?thread-5566-1-1.html ),后经尝试了下,没有成功.有些代码看不懂,或者我改得不对.
在这里想请教大家该怎么解决这个问题呢?感谢...

我已经确认务器的PHP编译带了mbstring 模块

Ja-news1.3.1模块
modules/mod_janews/helper.php
找到了
			//$row->introtext1 = strip_tags($row->introtext);
			if ($maxchars && strlen ($row->introtext) > $maxchars) {
				//$row->introtext1 = substr ($row->introtext1, 0, $maxchars) . "...";
				$row->introtext1 = SmartTrim::trim($row->introtext, 0, $maxchars, $hiddenClasses);
				$row->introtext1 = str_replace('!@#!@#','
',$row->introtext1);
			}
			$row->introtext = str_replace('!@#!@#','
',$row->introtext);
			// clean up globals
			return $image;
		}

与解决方法的原代码对不起来,不知道该怎么修改了,下面是原文的修改方法

if ($maxchars && strlen ($row->introtext) > $maxchars) {
                        $row->introtext1 = substr ($row->introtext1, 0, $maxchars) . "...";
                }

改成
                mb_internal_encoding("UTF-8"); //定义MB的编码,没定义的话还是按照单字节切割。
                if ($maxchars && mb_strlen ($row->introtext) > $maxchars) {
                        $row->introtext1 = mb_substr ($row->introtext1, 0, $maxchars) . "...";
                }

如果大家知道这方面的知识,请回复一下,先谢谢了.
最后修改: 2008年07月24日 12:31 由 frankie11.

登录 或者   注册一个会员帐号 来参与讨论

更多
2008年09月02日 21:57 #2 作者: minipp
也遇到同样问题,关注!!!

登录 或者   注册一个会员帐号 来参与讨论

更多
2008年09月02日 22:49 #3 作者: Joomla之门
虽然 php.net 提供了 一些 Multibyte String 函数 ,但好像其中的 mb_substr() 也不能完全解决问题。

刚才在网上搜索了一下,发现在 这里 有一个方案,就是自定义一个 utf8_substr() 函数:
<?function utf8_substr($str,$start) {
     /*
    UTF-8 version of substr(), for people who can't use mb_substr() like me.
    Length is not the count of Bytes, but the count of UTF-8 Characters
    Author: Windix Feng
    Bug report to: windix(AT)gmail.com, http://www.douzi.org
     - History - 
   1.0 2004-02-01 Initial Version
   2.0 2004-02-01 Use PREG instead of STRCMP and cycles, SPEED UP!
    */ preg_match_all("/[x01-x7f]|[xc2-xdf][x80-xbf]|xe0[xa0-xbf][x80-xbf]|[xe1-xef][x80-xbf][x80-xbf]|xf0[x90-xbf][x80-xbf][x80-xbf]|[xf1-xf7][x80-xbf][x80-xbf][x80-xbf]/", $str, $ar);
      if(func_num_args() >= 3) {
         $end = func_get_arg(2);
         return join("",array_slice($ar[0],$start,$end));
     } else {
         return join("",array_slice($ar[0],$start));
     }
}
?>

将这个函数插入到 php 文件中,然后将所有的 substr() 都替换为 utf8_substr() 应该就可以了。

付费下载 Joomla 3 扩展汉化版: 我要付费支持 Joomla 之门!

登录 或者   注册一个会员帐号 来参与讨论

更多
2008年10月23日 20:19 #4 作者: leowanghua
谢谢 我正在找这个解决方法!

登录 或者   注册一个会员帐号 来参与讨论

更多
2008年10月23日 21:15 #5 作者: jackyking
1.5直接调用Jstring类就行了..

$row->introtext1=Jstring::substr ($row->introtext1, 0, $maxchars)."...";

文件附件:

本站维护下列组件汉化
  • Community Builder 1.2RC4 Qcontacts
  • uddeIM 1.6  Custom Properties Alphauserpoints
  • JomComment JComments JFusion

登录 或者   注册一个会员帐号 来参与讨论

更多
2011年06月29日 06:54 #6 作者: chuen0624
mb_substr()可以用啊,挺好用的,大部分国内主机都会开启mbstring.dll

www.Joomme.com
专业Joomla服务商

登录 或者   注册一个会员帐号 来参与讨论