1 | <?php |
---|
2 | |
---|
3 | /** |
---|
4 | * This is the dynamic loader for the library. It checks whether you have |
---|
5 | * the mbstring extension available and includes relevant files |
---|
6 | * on that basis, falling back to the native (as in written in PHP) version |
---|
7 | * if mbstring is unavailabe. |
---|
8 | * |
---|
9 | * It's probably easiest to use this, if you don't want to understand |
---|
10 | * the dependencies involved, in conjunction with PHP versions etc. At |
---|
11 | * the same time, you might get better performance by managing loading |
---|
12 | * yourself. The smartest way to do this, bearing in mind performance, |
---|
13 | * is probably to "load on demand" - i.e. just before you use these |
---|
14 | * functions in your code, load the version you need. |
---|
15 | * |
---|
16 | * It makes sure the the following functions are available; |
---|
17 | * utf8_strlen, utf8_strpos, utf8_strrpos, utf8_substr, |
---|
18 | * utf8_strtolower, utf8_strtoupper |
---|
19 | * Other functions in the ./native directory depend on these |
---|
20 | * six functions being available |
---|
21 | * @package utf8 |
---|
22 | */ |
---|
23 | |
---|
24 | // Check whether PCRE has been compiled with UTF-8 support |
---|
25 | $UTF8_ar = array(); |
---|
26 | if (preg_match('/^.{1}$/u', "ñ", $UTF8_ar) != 1) |
---|
27 | trigger_error('PCRE is not compiled with UTF-8 support', E_USER_ERROR); |
---|
28 | |
---|
29 | unset($UTF8_ar); |
---|
30 | |
---|
31 | // Put the current directory in this constant |
---|
32 | if (!defined('UTF8')) |
---|
33 | define('UTF8', dirname(__FILE__)); |
---|
34 | |
---|
35 | if (extension_loaded('mbstring') && !defined('UTF8_USE_MBSTRING') && !defined('UTF8_USE_NATIVE')) |
---|
36 | define('UTF8_USE_MBSTRING', true); |
---|
37 | else |
---|
38 | define('UTF8_USE_NATIVE', true); |
---|
39 | |
---|
40 | // utf8_strpos() and utf8_strrpos() need utf8_bad_strip() to strip invalid |
---|
41 | // characters. Mbstring doesn't do this while the Native implementation does. |
---|
42 | require UTF8.'/utils/bad.php'; |
---|
43 | |
---|
44 | if (defined('UTF8_USE_MBSTRING')) |
---|
45 | { |
---|
46 | /** |
---|
47 | * If string overloading is active, it will break many of the |
---|
48 | * native implementations. mbstring.func_overload must be set |
---|
49 | * to 0, 1 or 4 in php.ini (string overloading disabled). |
---|
50 | * Also need to check we have the correct internal mbstring |
---|
51 | * encoding |
---|
52 | */ |
---|
53 | if (ini_get('mbstring.func_overload') & MB_OVERLOAD_STRING) |
---|
54 | trigger_error('String functions are overloaded by mbstring', E_USER_ERROR); |
---|
55 | |
---|
56 | mb_language('uni'); |
---|
57 | mb_internal_encoding('UTF-8'); |
---|
58 | |
---|
59 | if (!defined('UTF8_CORE')) |
---|
60 | require UTF8.'/mbstring/core.php'; |
---|
61 | } |
---|
62 | elseif (defined('UTF8_USE_NATIVE')) |
---|
63 | { |
---|
64 | if (!defined('UTF8_CORE')) |
---|
65 | { |
---|
66 | require UTF8.'/utils/unicode.php'; |
---|
67 | require UTF8.'/native/core.php'; |
---|
68 | } |
---|
69 | } |
---|
70 | |
---|
71 | // Load the native implementation of utf8_trim |
---|
72 | require UTF8.'/trim.php'; |
---|