CI框架源码解析7编码类文件Utf8.php

直接上源码

 

<?php

defined('BASEPATH') OR exit('No direct script access allowed');

/*
 * 编码类文件Utf8.php
 */
class CI_Utf8 {

    /*
     * 构造函数 检测是否支持utf8
     */
	public function __construct()
	{
		if (
			defined('PREG_BAD_UTF8_ERROR')
			&& (ICONV_ENABLED === TRUE OR MB_ENABLED === TRUE)
			&& strtoupper(config_item('charset')) === 'UTF-8'
			)
		{
			define('UTF8_ENABLED', TRUE);
			log_message('debug', 'UTF-8 Support Enabled');
		}
		else
		{
			define('UTF8_ENABLED', FALSE);
			log_message('debug', 'UTF-8 Support Disabled');
		}

		log_message('info', 'Utf8 Class Initialized');
	}

    /*
     *  过滤UTF8字符串,因为编码转换成功率不会到100%
     */
	public function clean_string($str)
	{
		if ($this->is_ascii($str) === FALSE)
		{
			if (MB_ENABLED)
			{
				$str = mb_convert_encoding($str, 'UTF-8', 'UTF-8');
			}
			elseif (ICONV_ENABLED)
			{
				$str = @iconv('UTF-8', 'UTF-8//IGNORE', $str);
			}
		}

		return $str;
	}

    /*
     * 删除所有在xml中可能导致问题的ASCII码字符
     */
	public function safe_ascii_for_xml($str)
	{
		return remove_invisible_characters($str, FALSE);
	}

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

    // convert_to_utf8()函数将字符串转换为utf8编码,
    //首先如果mb_convert_encoding函数存在,
    //使用mb_convert_encoding函数转换,否则如果iconv函数存在,使用iconv转换;如果上面两个函数都不存在则不能转换返回false;如果转换完成返回转换后的字符串

	public function convert_to_utf8($str, $encoding)
	{
		if (MB_ENABLED)
		{
			return mb_convert_encoding($str, 'UTF-8', $encoding);
		}
		elseif (ICONV_ENABLED)
		{
			return @iconv($encoding, 'UTF-8', $str);
		}

		return FALSE;
	}

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

}

 

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值