【PHP】CI框架原始碼分析核心檔案之Utf8.php
<!--?php
* CodeIgniter
*
* An open source application development framework for PHP
*
* This content is released under the MIT License (MIT)
*
* Copyright (c) 2014 - 2016, British Columbia Institute of Technology
*
* Permission is hereby granted, free of charge, to any person obtaining a copy
* of this software and associated documentation files (the "Software"), to deal
* in the Software without restriction, including without limitation the rights
* to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
* copies of the Software, and to permit persons to whom the Software is
* furnished to do so, subject to the following conditions:
*
* The above copyright notice and this permission notice shall be included in
* all copies or substantial portions of the Software.
*
* THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
* IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
* FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
* AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
* LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
* OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN
* THE SOFTWARE.
*
* @package CodeIgniter
* @author EllisLab Dev Team
* @copyright Copyright (c) 2008 - 2014, EllisLab, Inc. ()
* @copyright Copyright (c) 2014 - 2016, British Columbia Institute of Technology ()
* @license MIT License
* @link
* @since Version 2.0.0
* @filesource
*/
defined('BASEPATH') OR exit('No direct script access allowed');
/**
* Utf8 Class
*
* Provides support for UTF-8 environments
*
* @package CodeIgniter
* @subpackage Libraries
* @category UTF-8
* @author EllisLab Dev Team
* @link /user_guide/libraries/utf8.html
*/
class CI_Utf8 {
/**
* Class constructor
*
* Determines if UTF-8 support is to be enabled.
*
* @return void
*/
public function __construct()
{
if (
defined('PREG_BAD_UTF8_ERROR') // PCRE must support UTF-8--perl正規表示式需要支援UTF-8
&& (ICONV_ENABLED === TRUE OR MB_ENABLED === TRUE) // iconv or mbstring must be installed--需要其中任何一個擴充套件的支援(mbstirng or iconv)
&& strtoupper(config_item('charset')) === 'UTF-8' // Application charset must be UTF-8--配置檔案為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');
}
// --------------------------------------------------------------------
/**
* Clean UTF-8 strings
*過濾一些非UTF-8的字元
* Ensures strings contain only valid UTF-8 characters.
*
* @param string $str String to clean
* @return string
*/
public function clean_string($str)
//非ASCII字元,則啟動轉換(大於255的字元)
if ($this->is_ascii($str) === FALSE)
//如果採用mbstring
if (MB_ENABLED)
{
$str = mb_convert_encoding($str, 'UTF-8', 'UTF-8');
}
//如果iconv
elseif (ICONV_ENABLED)
{
$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.
*刪除ASCII控制字元
* @param string $str String to clean
* @return string
*/
public function safe_ascii_for_xml($str)
{
return remove_invisible_characters($str, FALSE);
}
// --------------------------------------------------------------------
/**
* Convert to UTF-8
*
* Attempts to convert a string to UTF-8.
*
* @param string $str Input string
* @param string $encoding Input encoding
* @return string $str encoded in UTF-8 or FALSE on failure
*/
public function convert_to_utf8($str, $encoding)
{
//優先mbstring,$encoding輸入的編碼,將輸入的編碼轉換成UTF-8
if (MB_ENABLED)
{
return mb_convert_encoding($str, 'UTF-8', $encoding);
}
elseif (ICONV_ENABLED)
{
return @iconv($encoding, 'UTF-8', $str);
}
return FALSE;
}
// --------------------------------------------------------------------
/**
* Is ASCII?
*
* Tests if a string is standard 7-bit ASCII or not.
*
* @param string $str String to check
* @return bool
*/
public function is_ascii($str)
{
//匹配到ASCII字元,則返回為true,[^\x00-\x7F]匹配為大於255的字元
return (preg_match('/[^\x00-\x7F]/S', $str) === 0);
}
}
* CodeIgniter
*
* An open source application development framework for PHP
*
* This content is released under the MIT License (MIT)
*
* Copyright (c) 2014 - 2016, British Columbia Institute of Technology
*
* Permission is hereby granted, free of charge, to any person obtaining a copy
* of this software and associated documentation files (the "Software"), to deal
* in the Software without restriction, including without limitation the rights
* to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
* copies of the Software, and to permit persons to whom the Software is
* furnished to do so, subject to the following conditions:
*
* The above copyright notice and this permission notice shall be included in
* all copies or substantial portions of the Software.
*
* THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
* IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
* FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
* AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
* LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
* OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN
* THE SOFTWARE.
*
* @package CodeIgniter
* @author EllisLab Dev Team
* @copyright Copyright (c) 2008 - 2014, EllisLab, Inc. ()
* @copyright Copyright (c) 2014 - 2016, British Columbia Institute of Technology ()
* @license MIT License
* @link
* @since Version 2.0.0
* @filesource
*/
defined('BASEPATH') OR exit('No direct script access allowed');
/**
* Utf8 Class
*
* Provides support for UTF-8 environments
*
* @package CodeIgniter
* @subpackage Libraries
* @category UTF-8
* @author EllisLab Dev Team
* @link /user_guide/libraries/utf8.html
*/
class CI_Utf8 {
/**
* Class constructor
*
* Determines if UTF-8 support is to be enabled.
*
* @return void
*/
public function __construct()
{
if (
defined('PREG_BAD_UTF8_ERROR') // PCRE must support UTF-8--perl正規表示式需要支援UTF-8
&& (ICONV_ENABLED === TRUE OR MB_ENABLED === TRUE) // iconv or mbstring must be installed--需要其中任何一個擴充套件的支援(mbstirng or iconv)
&& strtoupper(config_item('charset')) === 'UTF-8' // Application charset must be UTF-8--配置檔案為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');
}
// --------------------------------------------------------------------
/**
* Clean UTF-8 strings
*過濾一些非UTF-8的字元
* Ensures strings contain only valid UTF-8 characters.
*
* @param string $str String to clean
* @return string
*/
public function clean_string($str)
//非ASCII字元,則啟動轉換(大於255的字元)
if ($this->is_ascii($str) === FALSE)
//如果採用mbstring
if (MB_ENABLED)
{
$str = mb_convert_encoding($str, 'UTF-8', 'UTF-8');
}
//如果iconv
elseif (ICONV_ENABLED)
{
$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.
*刪除ASCII控制字元
* @param string $str String to clean
* @return string
*/
public function safe_ascii_for_xml($str)
{
return remove_invisible_characters($str, FALSE);
}
// --------------------------------------------------------------------
/**
* Convert to UTF-8
*
* Attempts to convert a string to UTF-8.
*
* @param string $str Input string
* @param string $encoding Input encoding
* @return string $str encoded in UTF-8 or FALSE on failure
*/
public function convert_to_utf8($str, $encoding)
{
//優先mbstring,$encoding輸入的編碼,將輸入的編碼轉換成UTF-8
if (MB_ENABLED)
{
return mb_convert_encoding($str, 'UTF-8', $encoding);
}
elseif (ICONV_ENABLED)
{
return @iconv($encoding, 'UTF-8', $str);
}
return FALSE;
}
// --------------------------------------------------------------------
/**
* Is ASCII?
*
* Tests if a string is standard 7-bit ASCII or not.
*
* @param string $str String to check
* @return bool
*/
public function is_ascii($str)
{
//匹配到ASCII字元,則返回為true,[^\x00-\x7F]匹配為大於255的字元
return (preg_match('/[^\x00-\x7F]/S', $str) === 0);
}
}
來自 “ ITPUB部落格 ” ,連結:http://blog.itpub.net/30221425/viewspace-2090037/,如需轉載,請註明出處,否則將追究法律責任。
相關文章
- 【PHP】CI框架原始碼分析核心檔案之Input.phpPHP框架原始碼
- 【PHP】CI框架原始碼分析核心檔案之Loader.phpPHP框架原始碼
- 【PHP】CI框架原始碼分析核心檔案之Controller.phpPHP框架原始碼Controller
- 【PHP】CI框架原始碼DB.php(資料庫類)PHP框架原始碼資料庫
- vue原始碼分析系列之入口檔案分析Vue原始碼
- 鴻蒙輕核心原始碼分析:檔案系統LittleFS鴻蒙原始碼
- workerman 框架原始碼核心分析和註解框架原始碼
- PHP JWT CI 框架PHPJWT框架
- PHP底層核心原始碼之變數PHP原始碼變數
- PHP檔案上傳原始碼分析(RFC1867)PHP原始碼
- MyBatis原始碼分析之核心處理層MyBatis原始碼
- PHP檔案分享系統原始碼PHP原始碼
- CI框架原始碼閱讀筆記6 擴充套件鉤子 Hook.php框架原始碼筆記套件HookPHP
- CI框架原始碼解讀--ROUTE和URL類框架原始碼
- YARN 核心原始碼分析Yarn原始碼
- mmap核心原始碼分析原始碼
- 爬蟲框架Webmagic原始碼分析之Spider爬蟲框架Web原始碼IDE
- Linux核心原始碼分析之setup_arch (四)Linux原始碼
- Linux核心原始碼分析之setup_arch (二)Linux原始碼
- Linux核心原始碼分析之set_arch (一)Linux原始碼
- Linux核心原始碼分析之setup_arch (三)Linux原始碼
- 併發程式設計之 SynchronousQueue 核心原始碼分析程式設計原始碼
- workerman 網路框架原始碼核心分析和註解 over 篇框架原始碼
- ThinkPHP3.1.3原始碼分析(一) 入口檔案分析PHP原始碼
- NIO框架之MINA原始碼解析(二):mina核心引擎框架原始碼
- Guava 原始碼分析之 EventBus 原始碼分析Guava原始碼
- paypal之nodejs 框架 Kraken-js 原始碼分析NodeJS框架原始碼
- 【集合框架】JDK1.8原始碼分析之HashMap(一)框架JDK原始碼HashMap
- 【集合框架】JDK1.8原始碼分析之ArrayList(六)框架JDK原始碼
- 【集合框架】JDK1.8原始碼分析之TreeMap(五)框架JDK原始碼
- 【PHP7原始碼分析】PHP7原始碼研究之淺談Zend虛擬機器PHP原始碼虛擬機
- 【核心檔案系統】原始碼閱讀stat.h原始碼
- MJRefresh原始碼框架分析原始碼框架
- Android 原始碼分析之 AsyncTask 原始碼分析Android原始碼
- 專案中常用的 .env 檔案原理原始碼分析原始碼
- 【集合框架】JDK1.8原始碼分析之LinkedHashMap(二)框架JDK原始碼HashMap
- 【集合框架】JDK1.8原始碼分析之Collections && Arrays(十)框架JDK原始碼
- 【集合框架】JDK1.8原始碼分析之LinkedList(七)框架JDK原始碼