ExtCalendar v2组件使用手记(三)strftime()函数我心中的痛
通过安装和修改了一下迷你日历,这个组件已经有点样子了,到这个组件主界面看一下,晕倒,有一点乱码,发现就在显示星期的位置。看看我怎么去调整它。
(以下过程均为我在自己服务器调度的过程,我的网站编码为UTF-8,所以我装这个组件所用的编码也是UTF-8,才会出现下面这个问题)
现在看上去,一切都很好,除了显示星期的位置为乱码外,现在来找找原因
首先我用了英文语言包试一下,正常没有乱码。我再把英文语言包的日期格式部分换到中文语言包文件中,同样出现问题。难道不是这里问题,忽然在语言包前面我看到这样的语句。
'locale' => array('en','english')
难道和这里有关系。不管3721,把中文的语言包中的区域也给它改成英语地区看看,呵呵,回到前台,有乱码的地方已经正常显示了,只不过显示的英文的星期,如果你不在意用英文星期的话,这样就可以了,将就着用一下。对于我英文不好,总觉得看到别扭,再找原因 。
看了一下程序,找到了和显示星期有关的一个函数,strftime(),这个函数是返回一个本地化格式的日期字符串,比较晕倒的是,它返加的是一个本地编
码的字符串,也就是如果用
strftime("%A");的话,得到的是一个GB编码的“星期”,而不是我所要的UTF-8编码,为了验证一下这个结果,我把网页编码改成
GB231,果然,那乱码的地方就是“星期..”正常显,其他地方,当然是乱码一片。好找到原因了现在看看怎么样解决他。
先google一下,看看网上有没有解决这个问题的方法,找了一圈一无所获,看来只有自己动手解决了。
忽然想到原来在台湾的joomla网上看到,很多人在问星期乱码的问题,看来和这个问题应该一样,下个台湾出的中方版joomla看看它是怎么解决的,终于在这个版本中发现解决的方法
if($mosConfig_lang== 'traditional_chinese' && function_exists('mb_convert_encoding')){
$date=mb_convert_encoding($date, "UTF-8", "BIG5");
它是这样来解决星期问题的,但对于ExtCalendar组件中,有N多个(好象有45处)strftime()函数怎么办,我的办法是 替换一个自定义函数,函数名就叫stfr()吧,先找到所有的stfrtime(替换成stfr(再在ExtCalendar组件中的config.inc.php文件中写上我自己定义的函数:
function strf($a,$b){
$a=mb_convert_encoding($a, "GBK", "UTF-8");
//想想看,这里为什么要将传入的格式先转化成gbk格式
$c=mb_convert_encoding(strftime($a,$b), "UTF-8", "GBK");
return $c;
}
回到网页再看一下,哈哈一切OK,所有的都正常显示。