diff options
author | Andreas Baumann <mail@andreasbaumann.cc> | 2019-11-17 20:57:39 +0100 |
---|---|---|
committer | Andreas Baumann <mail@andreasbaumann.cc> | 2019-11-17 20:57:39 +0100 |
commit | 3b06ee0d381dc1be5f40ca98ad4278046d869d21 (patch) | |
tree | d31e79fc57d882b8267f40c3434480bb58a3ca73 /include/utf8/utf8.php | |
download | fluxbb-3b06ee0d381dc1be5f40ca98ad4278046d869d21.tar.xz |
Diffstat (limited to 'include/utf8/utf8.php')
-rw-r--r-- | include/utf8/utf8.php | 72 |
1 files changed, 72 insertions, 0 deletions
diff --git a/include/utf8/utf8.php b/include/utf8/utf8.php new file mode 100644 index 0000000..661b2d7 --- /dev/null +++ b/include/utf8/utf8.php @@ -0,0 +1,72 @@ +<?php + +/** +* This is the dynamic loader for the library. It checks whether you have +* the mbstring extension available and includes relevant files +* on that basis, falling back to the native (as in written in PHP) version +* if mbstring is unavailabe. +* +* It's probably easiest to use this, if you don't want to understand +* the dependencies involved, in conjunction with PHP versions etc. At +* the same time, you might get better performance by managing loading +* yourself. The smartest way to do this, bearing in mind performance, +* is probably to "load on demand" - i.e. just before you use these +* functions in your code, load the version you need. +* +* It makes sure the the following functions are available; +* utf8_strlen, utf8_strpos, utf8_strrpos, utf8_substr, +* utf8_strtolower, utf8_strtoupper +* Other functions in the ./native directory depend on these +* six functions being available +* @package utf8 +*/ + +// Check whether PCRE has been compiled with UTF-8 support +$UTF8_ar = array(); +if (preg_match('/^.{1}$/u', "ñ", $UTF8_ar) != 1) + trigger_error('PCRE is not compiled with UTF-8 support', E_USER_ERROR); + +unset($UTF8_ar); + +// Put the current directory in this constant +if (!defined('UTF8')) + define('UTF8', dirname(__FILE__)); + +if (extension_loaded('mbstring') && !defined('UTF8_USE_MBSTRING') && !defined('UTF8_USE_NATIVE')) + define('UTF8_USE_MBSTRING', true); +else if (!defined('UTF8_USE_NATIVE')) + define('UTF8_USE_NATIVE', true); + +// utf8_strpos() and utf8_strrpos() need utf8_bad_strip() to strip invalid +// characters. Mbstring doesn't do this while the Native implementation does. +require UTF8.'/utils/bad.php'; + +if (defined('UTF8_USE_MBSTRING')) +{ + /** + * If string overloading is active, it will break many of the + * native implementations. mbstring.func_overload must be set + * to 0, 1 or 4 in php.ini (string overloading disabled). + * Also need to check we have the correct internal mbstring + * encoding + */ + if (ini_get('mbstring.func_overload') & MB_OVERLOAD_STRING) + trigger_error('String functions are overloaded by mbstring', E_USER_ERROR); + + mb_language('uni'); + mb_internal_encoding('UTF-8'); + + if (!defined('UTF8_CORE')) + require UTF8.'/mbstring/core.php'; +} +elseif (defined('UTF8_USE_NATIVE')) +{ + if (!defined('UTF8_CORE')) + { + require UTF8.'/utils/unicode.php'; + require UTF8.'/native/core.php'; + } +} + +// Load the native implementation of utf8_trim +require UTF8.'/trim.php'; |