source: sourcecode/system/core/Utf8.php @ 1

Last change on this file since 1 was 1, checked in by dungnv, 11 years ago
File size: 3.5 KB
Line 
1<?php  if ( ! defined('BASEPATH')) exit('No direct script access allowed');
2/**
3 * CodeIgniter
4 *
5 * An open source application development framework for PHP 5.1.6 or newer
6 *
7 * @package             CodeIgniter
8 * @author              ExpressionEngine Dev Team
9 * @copyright   Copyright (c) 2008 - 2011, EllisLab, Inc.
10 * @license             http://codeigniter.com/user_guide/license.html
11 * @link                http://codeigniter.com
12 * @since               Version 2.0
13 * @filesource
14 */
15
16// ------------------------------------------------------------------------
17
18/**
19 * Utf8 Class
20 *
21 * Provides support for UTF-8 environments
22 *
23 * @package             CodeIgniter
24 * @subpackage  Libraries
25 * @category    UTF-8
26 * @author              ExpressionEngine Dev Team
27 * @link                http://codeigniter.com/user_guide/libraries/utf8.html
28 */
29class CI_Utf8 {
30
31        /**
32         * Constructor
33         *
34         * Determines if UTF-8 support is to be enabled
35         *
36         */
37        function __construct()
38        {
39                log_message('debug', "Utf8 Class Initialized");
40
41                global $CFG;
42
43                if (
44                        preg_match('/./u', 'é') === 1                                  // PCRE must support UTF-8
45                        AND function_exists('iconv')                                    // iconv must be installed
46                        AND ini_get('mbstring.func_overload') != 1              // Multibyte string function overloading cannot be enabled
47                        AND $CFG->item('charset') == 'UTF-8'                    // Application charset must be UTF-8
48                        )
49                {
50                        log_message('debug', "UTF-8 Support Enabled");
51
52                        define('UTF8_ENABLED', TRUE);
53
54                        // set internal encoding for multibyte string functions if necessary
55                        // and set a flag so we don't have to repeatedly use extension_loaded()
56                        // or function_exists()
57                        if (extension_loaded('mbstring'))
58                        {
59                                define('MB_ENABLED', TRUE);
60                                mb_internal_encoding('UTF-8');
61                        }
62                        else
63                        {
64                                define('MB_ENABLED', FALSE);
65                        }
66                }
67                else
68                {
69                        log_message('debug', "UTF-8 Support Disabled");
70                        define('UTF8_ENABLED', FALSE);
71                }
72        }
73
74        // --------------------------------------------------------------------
75
76        /**
77         * Clean UTF-8 strings
78         *
79         * Ensures strings are UTF-8
80         *
81         * @access      public
82         * @param       string
83         * @return      string
84         */
85        function clean_string($str)
86        {
87                if ($this->_is_ascii($str) === FALSE)
88                {
89                        $str = @iconv('UTF-8', 'UTF-8//IGNORE', $str);
90                }
91
92                return $str;
93        }
94
95        // --------------------------------------------------------------------
96
97        /**
98         * Remove ASCII control characters
99         *
100         * Removes all ASCII control characters except horizontal tabs,
101         * line feeds, and carriage returns, as all others can cause
102         * problems in XML
103         *
104         * @access      public
105         * @param       string
106         * @return      string
107         */
108        function safe_ascii_for_xml($str)
109        {
110                return remove_invisible_characters($str, FALSE);
111        }
112
113        // --------------------------------------------------------------------
114
115        /**
116         * Convert to UTF-8
117         *
118         * Attempts to convert a string to UTF-8
119         *
120         * @access      public
121         * @param       string
122         * @param       string  - input encoding
123         * @return      string
124         */
125        function convert_to_utf8($str, $encoding)
126        {
127                if (function_exists('iconv'))
128                {
129                        $str = @iconv($encoding, 'UTF-8', $str);
130                }
131                elseif (function_exists('mb_convert_encoding'))
132                {
133                        $str = @mb_convert_encoding($str, 'UTF-8', $encoding);
134                }
135                else
136                {
137                        return FALSE;
138                }
139
140                return $str;
141        }
142
143        // --------------------------------------------------------------------
144
145        /**
146         * Is ASCII?
147         *
148         * Tests if a string is standard 7-bit ASCII or not
149         *
150         * @access      public
151         * @param       string
152         * @return      bool
153         */
154        function _is_ascii($str)
155        {
156                return (preg_match('/[^\x00-\x7F]/S', $str) == 0);
157        }
158
159        // --------------------------------------------------------------------
160
161}
162// End Utf8 Class
163
164/* End of file Utf8.php */
165/* Location: ./system/core/Utf8.php */
Note: See TracBrowser for help on using the repository browser.