123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164 |
- <?php
- /**
- * CodeIgniter
- *
- * An open source application development framework for PHP
- *
- * This content is released under the MIT License (MIT)
- *
- * Copyright (c) 2014 - 2019, 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. (https://ellislab.com/)
- * @copyright Copyright (c) 2014 - 2019, British Columbia Institute of Technology (https://bcit.ca/)
- * @license https://opensource.org/licenses/MIT MIT License
- * @link https://codeigniter.com
- * @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 https://codeigniter.com/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
- && (ICONV_ENABLED === TRUE OR MB_ENABLED === TRUE) // iconv or mbstring must be installed
- && strtoupper(config_item('charset')) === 'UTF-8' // Application charset must be 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
- *
- * Ensures strings contain only valid UTF-8 characters.
- *
- * @param string $str String to clean
- * @return string
- */
- 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;
- }
- // --------------------------------------------------------------------
- /**
- * 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.
- *
- * @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)
- {
- 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)
- {
- return (preg_match('/[^\x00-\x7F]/S', $str) === 0);
- }
- }
|