CI框架源码完全分析之核心文件(UTF8类)Utf8.php

UTF8类的主要功能是检测CI和环境是否支持Utf8编码,转换编码,过滤字符串的功能:

/**
 * Utf8 Class
 */
class CI_Utf8 {

    /**
     * 构造函数:检测是否支持utf8
     */
    function __construct()
    {
        log_message('debug', "Utf8 Class Initialized");

        global $CFG;

        if (
            preg_match('/./u', 'é') === 1                   // 正则支持UTF-8
            AND function_exists('iconv')                    // iconv已安装
            AND ini_get('mbstring.func_overload') != 1      // 多字节字符串函数重载没有启用
            AND $CFG->item('charset') == 'UTF-8'           // 配置charsetUTF-8
            )
        {
            log_message('debug', "UTF-8 Support Enabled");

            define('UTF8_ENABLED', TRUE);

            // set internal encoding for multibyte string functions if necessary
            // and set a flag so we don't have to repeatedly use extension_loaded()
            // or function_exists()
            if (extension_loaded('mbstring'))
            {
                define('MB_ENABLED', TRUE);
                mb_internal_encoding('UTF-8'); //设置内部编码
            }
            else
            {
                define('MB_ENABLED', FALSE);
            }
        }
        else
        {
            log_message('debug', "UTF-8 Support Disabled");
            define('UTF8_ENABLED', FALSE);
        }
    }

    // --------------------------------------------------------------------

    /**
     * 过滤UTF8字符串,因为编码转换成功率不会到100%
     */
    function clean_string($str)
    {
        if ($this->_is_ascii($str) === FALSE)
        {       
                        //IGNORE表示如果字符串不被转换为UTF-8,则已相近的字符串代替,否则字符串无法切割会产生E_NOTICE
            $str = @iconv('UTF-8', 'UTF-8//IGNORE', $str);
        }

        return $str;
    }

    // --------------------------------------------------------------------

    /**
     * 去除字符串中不可见字符,以免造成xml解析错误【不包括换行,回车和水平制表符,利用common.php中remove_invisible_characters函数】
     */
    function safe_ascii_for_xml($str)
    {
        return remove_invisible_characters($str, FALSE);
    }

    // --------------------------------------------------------------------

    /**
     * 将字符串转换为utf-8编码
     */
    function convert_to_utf8($str, $encoding)
    {
        if (function_exists('iconv'))
        {
            $str = @iconv($encoding, 'UTF-8', $str);
        }
        elseif (function_exists('mb_convert_encoding'))
        {
            $str = @mb_convert_encoding($str, 'UTF-8', $encoding);
        }
        else
        {
            return FALSE;
        }

        return $str;
    }

    /**
     * 检测字符串是不是ASCII码
     */
    function _is_ascii($str)
    {
        return (preg_match('/[^\x00-\x7F]/S', $str) == 0);
    }

}

转载注明地址: http://www.phpddt.com/php/ci-utf8.html 尊重他人劳动成果就是尊重自己!

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值