【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/,如需轉載,請註明出處,否則將追究法律責任。
相關文章
- vue原始碼分析系列之入口檔案分析Vue原始碼
- 鴻蒙輕核心原始碼分析:檔案系統LittleFS鴻蒙原始碼
- workerman 框架原始碼核心分析和註解框架原始碼
- PHP JWT CI 框架PHPJWT框架
- PHP底層核心原始碼之變數PHP原始碼變數
- PHP檔案分享系統原始碼PHP原始碼
- MyBatis原始碼分析之核心處理層MyBatis原始碼
- Linux核心原始碼分析之set_arch (一)Linux原始碼
- Linux核心原始碼分析之setup_arch (四)Linux原始碼
- Linux核心原始碼分析之setup_arch (二)Linux原始碼
- Linux核心原始碼分析之setup_arch (三)Linux原始碼
- YARN 核心原始碼分析Yarn原始碼
- 併發程式設計之 SynchronousQueue 核心原始碼分析程式設計原始碼
- workerman 網路框架原始碼核心分析和註解 over 篇框架原始碼
- Springboot 載入配置檔案原始碼分析Spring Boot原始碼
- MJRefresh原始碼框架分析原始碼框架
- Abp原始碼分析之虛擬檔案系統Volo.Abp.VirtualFileSystem原始碼
- 【核心檔案系統】原始碼閱讀stat.h原始碼
- 【PHP7原始碼分析】PHP7原始碼研究之淺談Zend虛擬機器PHP原始碼虛擬機
- Spring Security系列之核心過濾器原始碼分析(四)Spring過濾器原始碼
- Android 原始碼分析之 AsyncTask 原始碼分析Android原始碼
- Guava 原始碼分析之 EventBus 原始碼分析Guava原始碼
- 專案中常用的 .env 檔案原理原始碼分析原始碼
- Go語言中介軟體框架 Negroni 的靜態檔案處理原始碼分析Go框架原始碼
- Uber RIBs框架原始碼分析框架原始碼
- 微前端框架 之 qiankun 從入門到原始碼分析前端框架原始碼
- 入口檔案開始,分析Vue原始碼實現Vue原始碼
- Spring原始碼分析——spring原始碼核心方法refresh()介紹Spring原始碼
- PHP單一檔案入口框架簡析PHP框架
- 自研 PHP 框架 1.1_index.php 檔案說明PHP框架Index
- 自研 PHP 框架 1.0_index.php 檔案說明PHP框架Index
- Spring IOC容器核心流程原始碼分析Spring原始碼
- Laravel核心解讀–Cookie原始碼分析LaravelCookie原始碼
- Uncode-Schedule框架原始碼分析框架原始碼
- Java 集合框架------ArrayList原始碼分析Java框架原始碼
- Spring Boot核心技術之Restful對映以及原始碼的分析Spring BootREST原始碼
- Mac 下使用 clion 除錯 PHP 核心原始碼Mac除錯PHP原始碼
- DIY 實現 ThinkPHP 核心框架 (二)入口檔案PHP框架
- 原始碼分析之 HashMap原始碼HashMap