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 尊重他人劳动成果就是尊重自己!