文件地址:./system/core/Utf8.php
主要作用:提供utf-8編碼的環境支持
1.__construct() 構造函數確定utf8是否被支持
(1)日志記錄 Utf8 Class Initialized
(2)將CodeIgniter.php中的$CFG調用進當前類。
(3)判斷如果正則表達式支持utf8,iconv庫已經安裝,多字節字符串函數重載沒有啟用,應用程序字? 符集是utf8,那么
(a)記錄日志:UTF-8 Support Enabled。
(b)定義常量UTF8_ENABLED 值為 true
(c)如果加載了mbstring擴展我們設置內部編碼
(d)我們會設置一個標記讓我們不用多次使用extension_loaded() 函數
(4)判斷如果正則表達式不支持utf8或者iconv庫沒有安裝或者多字節字符串函數重載已經啟用或者應用程序字符集不是utf8,那么
(a)記錄日志:UTF-8 Support Disabled
(b)設置常量UTF8_ENABLED 為false
2.clean_string() ?清理utf8編碼的字符串
(1)判斷如果字符串不是ASCII碼
(2)使用iconv函數將字符串轉碼(關于iconv函數詳情見http://www.php.net/manual/zh/function.iconv.php)
(3)返回字符串
3.safe_ascii_for_xml() 刪除所有在xml中可能導致問題的ASCII碼字符,除了水平制表符,換行,回車。
(1) 直接調用remove_invisible_characters()來刪除無效的字符并返回。
注:remove_invisible_characters 函數在common.php中定義
4.convert_to_utf8() 將字符串轉換為utf8編碼
(1)如果iconv函數存在,使用iconv轉換
(2)如果mb_convert_encoding函數存在,使用mb_convert_encoding函數轉換
(3)如果上面兩個函數都不存在則不能轉換返回false
(4)如果轉換完成返回轉換后的字符串
5._is_ascii() ?測試一個字符串是不是ASCII碼
(1) 使用正則拼配返回測試結果。
~~~
<?php if ( ! defined('BASEPATH')) exit('No direct script access allowed');
/**
* CodeIgniter
*
* An open source application development framework for PHP 5.1.6 or newer
*
* @package CodeIgniter
* @author ExpressionEngine Dev Team
* @copyright Copyright (c) 2008 - 2011, EllisLab, Inc.
* @license http://codeigniter.com/user_guide/license.html
* @link http://codeigniter.com
* @since Version 2.0
* @filesource
*/
// ------------------------------------------------------------------------
/**
* Utf8 Class
*
* Provides support for UTF-8 environments
*
* @package CodeIgniter
* @subpackage Libraries
* @category UTF-8
* @author ExpressionEngine Dev Team
* @link http://codeigniter.com/user_guide/libraries/utf8.html
*/
class CI_Utf8 {
/**
* Constructor
*
* Determines if UTF-8 support is to be enabled
*
*/
function __construct()
{
log_message('debug', "Utf8 Class Initialized");
global $CFG;
if (
preg_match('/./u', 'é') === 1 // PCRE must support UTF-8
AND function_exists('iconv') // iconv must be installed
AND ini_get('mbstring.func_overload') != 1 // Multibyte string function overloading cannot be enabled
AND $CFG->item('charset') == 'UTF-8' // Application charset must be UTF-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);
}
}
// --------------------------------------------------------------------
/**
* Clean UTF-8 strings
*
* Ensures 保證 strings are UTF-8
*
* @access public
* @param string
* @return string
*/
function clean_string($str)
{
if ($this->_is_ascii($str) === FALSE)
{
$str = @iconv('UTF-8', 'UTF-8//IGNORE', $str);
}
return $str;
}
// --------------------------------------------------------------------
/**
* Remove ASCII control characters
*
* Removes all ASCII control characters except horizontal tabs,
* line feeds, and carriage returns, as all others can cause
* problems in XML
*
* @access public
* @param string
* @return string
*/
function safe_ascii_for_xml($str)
{
return remove_invisible_characters($str, FALSE);
}
// --------------------------------------------------------------------
/**
* Convert to UTF-8
*
* Attempts 企圖 to convert a string to UTF-8
*
* @access public
* @param string
* @param string - input encoding
* @return string
*/
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;
}
// --------------------------------------------------------------------
/**
* Is ASCII?
*
* Tests if a string is standard 7-bit ASCII or not
*
* @access public
* @param string
* @return bool
*/
function _is_ascii($str)
{
return (preg_match('/[^\x00-\x7F]/S', $str) == 0);
}
// --------------------------------------------------------------------
}
// End Utf8 Class
/* End of file Utf8.php */
/* Location: ./system/core/Utf8.php */
~~~