首頁 > php教程 > php手册 > Yii框架针对gbk编码的修改,CHtml可用,兼容php5.4

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

WBOYWBOYWBOYWBOYWBOYWBOYWBOYWBOYWBOYWBOYWBOYWBOYWB
發布: 2016-06-06 20:07:46
原創
1066 人瀏覽過

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

如果你的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

public static function encode($text)

{

    if(PHP_VERSION 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;

}

登入後複製
相關標籤:
本網站聲明
本文內容由網友自願投稿,版權歸原作者所有。本站不承擔相應的法律責任。如發現涉嫌抄襲或侵權的內容,請聯絡admin@php.cn
最新問題
熱門推薦
熱門教學
更多>
最新下載
更多>
網站特效
網站源碼
網站素材
前端模板