Yii框架针对gbk编码的修改,CHtml可用,兼容php5.4

如果你的Yii框架不得已要使用gbk编码,你要做的有四件事:
1.复制一份儿框架中的中文语言包出来改为gbk编码,放在protected/messages,然后配置文件的components段中加入

1
2
3
4
5
// gbk编码的语言包
'coreMessages' => array (
     //'basePath'=>null,
     'basePath' =>  dirname( __FILE__ ).DIRECTORY_SEPARATOR. '..' .DIRECTORY_SEPARATOR. 'messages' ,
),

2.复制一份儿框架中的i18n中关于中文的文件改为gbk编码,放在protected/i18n/data下
然后config/main.php中加入

1
'localeDataPath' =>dirname( __FILE__ ).DIRECTORY_SEPARATOR. '../i18n/data' ,

3.复制一份儿框架中的views/exception.php到protected/views/system,改一下里面的编码为gbk,默认是utf8,否则调试页面就乱码了。

4.修改CHtml类:

CHtml类使用了htmlspecialchars来格式化输出,但htmlspecialchars不支持gbk编码。
当然,你可以把htmlspecialchars的编码去掉,但php5.4这样做时,就会没有输出。
一共改两个方法,一个是encode,还有一个encodearray

如果你使用了apc的话,请修改框架目录中yiilite.php中对应的两个方法。

如果你不使用apc的话,并且像我一样不愿意修改框架本身,可以把Chtml复制一份出来然后使用Yii的classmap来自定义这个类的路径。然后在入口文件处来定义,例如我的:

1
2
3
require_once ( $yii );
// 重写yii class map,使用自定义的CHtml。 yiilite中的代码要手动修改不能使用此方法覆盖
Yii:: $classMap = array ( 'CHtml' =>__DIR__. '/../protected/extensions/helpers/CHtml.php' );

下面是要修改的CHtml类中的两个方法

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
public static function encode( $text )
{
     if (PHP_VERSION < '5.4.0' ) {
         return htmlspecialchars( $text ,ENT_QUOTES);
     }
     else
     {
         if ( strtolower (Yii::app()->charset) == 'utf-8' ) {
             $charset = 'UTF-8' ;
         } else {
             $charset = 'ISO-8859-1' ;
         }
         return htmlspecialchars( $text ,ENT_QUOTES, $charset );
     }
 
     return htmlspecialchars( $text ,ENT_QUOTES,Yii::app()->charset);
}
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
public static function encodeArray( $data )
{
     $d = array ();
     foreach ( $data as $key => $value )
     {
         if ( is_string ( $key ))
             $key =self::encode( $key );
         if ( is_string ( $value ))
             $value =self::encode( $value );
         else if ( is_array ( $value ))
             $value =self::encodeArray( $value );
         $d [ $key ]= $value ;
     }
     return $d ;
}
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值