Subversion Repositories SmartDukaan

Rev

Blame | Last modification | View Log | RSS feed

<?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 */