xref: /dokuwiki/inc/utf8.php (revision 0a8df03fe343b38077b1c8452f269982cadfbe9b)
1ed7b5f09Sandi<?php
282257610Sandi/**
382257610Sandi * UTF8 helper functions
482257610Sandi *
50da4ba1bSAndreas Gohr * This file now only intitializes the UTF-8 capability detection and defines helper
60da4ba1bSAndreas Gohr * functions if needed. All actual code is in the \dokuwiki\Utf8 classes
70da4ba1bSAndreas Gohr *
882257610Sandi * @author     Andreas Gohr <andi@splitbrain.org>
982257610Sandi */
1082257610Sandi
110da4ba1bSAndreas Gohruse dokuwiki\Utf8\Clean;
120da4ba1bSAndreas Gohruse dokuwiki\Utf8\Conversion;
130da4ba1bSAndreas Gohruse dokuwiki\Utf8\PhpString;
140da4ba1bSAndreas Gohruse dokuwiki\Utf8\Unicode;
150da4ba1bSAndreas Gohr
16ab77016bSAndreas Gohr/**
17ab77016bSAndreas Gohr * check for mb_string support
18ab77016bSAndreas Gohr */
19ab77016bSAndreas Gohrif (!defined('UTF8_MBSTRING')) {
20ab77016bSAndreas Gohr    if (function_exists('mb_substr') && !defined('UTF8_NOMBSTRING')) {
21ab77016bSAndreas Gohr        define('UTF8_MBSTRING', 1);
22ab77016bSAndreas Gohr    } else {
23ab77016bSAndreas Gohr        define('UTF8_MBSTRING', 0);
24ab77016bSAndreas Gohr    }
25ab77016bSAndreas Gohr}
26ab77016bSAndreas Gohr
273161005dSAndreas Gohr/**
283161005dSAndreas Gohr * Check if PREG was compiled with UTF-8 support
293161005dSAndreas Gohr *
303161005dSAndreas Gohr * Without this many of the functions below will not work, so this is a minimal requirement
313161005dSAndreas Gohr */
323161005dSAndreas Gohrif (!defined('UTF8_PREGSUPPORT')) {
333161005dSAndreas Gohr    define('UTF8_PREGSUPPORT', (bool)@preg_match('/^.$/u', 'ñ'));
343161005dSAndreas Gohr}
353161005dSAndreas Gohr
363161005dSAndreas Gohr/**
373161005dSAndreas Gohr * Check if PREG was compiled with Unicode Property support
383161005dSAndreas Gohr *
393161005dSAndreas Gohr * This is not required for the functions below, but might be needed in a UTF-8 aware application
403161005dSAndreas Gohr */
413161005dSAndreas Gohrif (!defined('UTF8_PROPERTYSUPPORT')) {
423161005dSAndreas Gohr    define('UTF8_PROPERTYSUPPORT', (bool)@preg_match('/^\pL$/u', 'ñ'));
433161005dSAndreas Gohr}
443161005dSAndreas Gohr
453161005dSAndreas Gohr
46f41bbe4cSAndreas Gohrif (UTF8_MBSTRING) {
47f41bbe4cSAndreas Gohr    mb_internal_encoding('UTF-8');
48f41bbe4cSAndreas Gohr}
49f41bbe4cSAndreas Gohr
505e613a5cSchris
51df957b36SAndreas Gohrif (!function_exists('utf8_isASCII')) {
52*0a8df03fSAndreas Gohr    /** @deprecated 2019-06-09 */
53f41bbe4cSAndreas Gohr    function utf8_isASCII($str)
54f41bbe4cSAndreas Gohr    {
55*0a8df03fSAndreas Gohr        dbg_deprecated(Clean::class . '::isASCII()');
560da4ba1bSAndreas Gohr        return Clean::isASCII($str);
5744f669e9Sandi    }
58df957b36SAndreas Gohr}
5944f669e9Sandi
60f41bbe4cSAndreas Gohr
61df957b36SAndreas Gohrif (!function_exists('utf8_strip')) {
62*0a8df03fSAndreas Gohr    /** @deprecated 2019-06-09 */
63f41bbe4cSAndreas Gohr    function utf8_strip($str)
64f41bbe4cSAndreas Gohr    {
65*0a8df03fSAndreas Gohr        dbg_deprecated(Clean::class . '::strip()');
660da4ba1bSAndreas Gohr        return Clean::strip($str);
67e1906e6eSandi    }
68df957b36SAndreas Gohr}
69e1906e6eSandi
70df957b36SAndreas Gohrif (!function_exists('utf8_check')) {
71*0a8df03fSAndreas Gohr    /** @deprecated 2019-06-09 */
72f41bbe4cSAndreas Gohr    function utf8_check($str)
73f41bbe4cSAndreas Gohr    {
74*0a8df03fSAndreas Gohr        dbg_deprecated(Clean::class . '::isUtf8()');
750da4ba1bSAndreas Gohr        return Clean::isUtf8($str);
76f29bd553Sandi    }
77df957b36SAndreas Gohr}
7849c713a3Sandi
79f393a4ebSAndreas Gohrif (!function_exists('utf8_basename')) {
80*0a8df03fSAndreas Gohr    /** @deprecated 2019-06-09 */
81f41bbe4cSAndreas Gohr    function utf8_basename($path, $suffix = '')
82f41bbe4cSAndreas Gohr    {
83*0a8df03fSAndreas Gohr        dbg_deprecated(PhpString::class . '::basename()');
840da4ba1bSAndreas Gohr        return PhpString::basename($path, $suffix);
85f393a4ebSAndreas Gohr    }
86f393a4ebSAndreas Gohr}
87f393a4ebSAndreas Gohr
88df957b36SAndreas Gohrif (!function_exists('utf8_strlen')) {
89*0a8df03fSAndreas Gohr    /** @deprecated 2019-06-09 */
90f41bbe4cSAndreas Gohr    function utf8_strlen($str)
91f41bbe4cSAndreas Gohr    {
92*0a8df03fSAndreas Gohr        dbg_deprecated(PhpString::class . '::strlen()');
930da4ba1bSAndreas Gohr        return PhpString::strlen($str);
942f954959Sandi    }
95df957b36SAndreas Gohr}
962f954959Sandi
97df957b36SAndreas Gohrif (!function_exists('utf8_substr')) {
98*0a8df03fSAndreas Gohr    /** @deprecated 2019-06-09 */
99f41bbe4cSAndreas Gohr    function utf8_substr($str, $offset, $length = null)
100f41bbe4cSAndreas Gohr    {
101*0a8df03fSAndreas Gohr        dbg_deprecated(PhpString::class . '::substr()');
1020da4ba1bSAndreas Gohr        return PhpString::substr($str, $offset, $length);
1032626ee0cSchris    }
104df957b36SAndreas Gohr}
10510f09f2aSAndreas Gohr
106df957b36SAndreas Gohrif (!function_exists('utf8_substr_replace')) {
107*0a8df03fSAndreas Gohr    /** @deprecated 2019-06-09 */
108f41bbe4cSAndreas Gohr    function utf8_substr_replace($string, $replacement, $start, $length = 0)
109f41bbe4cSAndreas Gohr    {
110*0a8df03fSAndreas Gohr        dbg_deprecated(PhpString::class . '::substr_replace()');
1110da4ba1bSAndreas Gohr        return PhpString::substr_replace($string, $replacement, $start, $length);
112dc57ef04Sandi    }
113df957b36SAndreas Gohr}
114dc57ef04Sandi
115df957b36SAndreas Gohrif (!function_exists('utf8_ltrim')) {
116*0a8df03fSAndreas Gohr    /** @deprecated 2019-06-09 */
117f41bbe4cSAndreas Gohr    function utf8_ltrim($str, $charlist = '')
118f41bbe4cSAndreas Gohr    {
119*0a8df03fSAndreas Gohr        dbg_deprecated(PhpString::class . '::ltrim()');
1200da4ba1bSAndreas Gohr        return PhpString::ltrim($str, $charlist);
121f29317c1Sandi    }
122df957b36SAndreas Gohr}
123f29317c1Sandi
124df957b36SAndreas Gohrif (!function_exists('utf8_rtrim')) {
125*0a8df03fSAndreas Gohr    /** @deprecated 2019-06-09 */
126f41bbe4cSAndreas Gohr    function utf8_rtrim($str, $charlist = '')
127f41bbe4cSAndreas Gohr    {
128*0a8df03fSAndreas Gohr        dbg_deprecated(PhpString::class . '::rtrim()');
1290da4ba1bSAndreas Gohr        return PhpString::rtrim($str, $charlist);
130f29317c1Sandi    }
131df957b36SAndreas Gohr}
132f29317c1Sandi
133df957b36SAndreas Gohrif (!function_exists('utf8_trim')) {
134*0a8df03fSAndreas Gohr    /** @deprecated 2019-06-09 */
135f41bbe4cSAndreas Gohr    function utf8_trim($str, $charlist = '')
136f41bbe4cSAndreas Gohr    {
137*0a8df03fSAndreas Gohr        dbg_deprecated(PhpString::class . '::trim()');
1380da4ba1bSAndreas Gohr        return PhpString::trim($str, $charlist);
139f29317c1Sandi    }
140df957b36SAndreas Gohr}
141f29317c1Sandi
142df957b36SAndreas Gohrif (!function_exists('utf8_strtolower')) {
143*0a8df03fSAndreas Gohr    /** @deprecated 2019-06-09 */
144f41bbe4cSAndreas Gohr    function utf8_strtolower($str)
145f41bbe4cSAndreas Gohr    {
146*0a8df03fSAndreas Gohr        dbg_deprecated(PhpString::class . '::strtolower()');
1470da4ba1bSAndreas Gohr        return PhpString::strtolower($str);
14882257610Sandi    }
149df957b36SAndreas Gohr}
15082257610Sandi
151df957b36SAndreas Gohrif (!function_exists('utf8_strtoupper')) {
152*0a8df03fSAndreas Gohr    /** @deprecated 2019-06-09 */
153f41bbe4cSAndreas Gohr    function utf8_strtoupper($str)
154f41bbe4cSAndreas Gohr    {
155*0a8df03fSAndreas Gohr        dbg_deprecated(PhpString::class . '::strtoupper()');
1560da4ba1bSAndreas Gohr        return PhpString::strtoupper($str);
15782257610Sandi    }
158df957b36SAndreas Gohr}
15982257610Sandi
160df957b36SAndreas Gohrif (!function_exists('utf8_ucfirst')) {
161*0a8df03fSAndreas Gohr    /** @deprecated 2019-06-09 */
162f41bbe4cSAndreas Gohr    function utf8_ucfirst($str)
163f41bbe4cSAndreas Gohr    {
164*0a8df03fSAndreas Gohr        dbg_deprecated(PhpString::class . '::ucfirst()');
1650da4ba1bSAndreas Gohr        return PhpString::ucfirst($str);
16626ece5a7SAndreas Gohr    }
167df957b36SAndreas Gohr}
16826ece5a7SAndreas Gohr
169df957b36SAndreas Gohrif (!function_exists('utf8_ucwords')) {
170*0a8df03fSAndreas Gohr    /** @deprecated 2019-06-09 */
171f41bbe4cSAndreas Gohr    function utf8_ucwords($str)
172f41bbe4cSAndreas Gohr    {
173*0a8df03fSAndreas Gohr        dbg_deprecated(PhpString::class . '::ucwords()');
1740da4ba1bSAndreas Gohr        return PhpString::ucwords($str);
17526ece5a7SAndreas Gohr    }
176df957b36SAndreas Gohr}
17726ece5a7SAndreas Gohr
178df957b36SAndreas Gohrif (!function_exists('utf8_deaccent')) {
179*0a8df03fSAndreas Gohr    /** @deprecated 2019-06-09 */
180f41bbe4cSAndreas Gohr    function utf8_deaccent($str, $case = 0)
181f41bbe4cSAndreas Gohr    {
182*0a8df03fSAndreas Gohr        dbg_deprecated(Clean::class . '::deaccent()');
1830da4ba1bSAndreas Gohr        return Clean::deaccent($str, $case);
18482257610Sandi    }
185df957b36SAndreas Gohr}
18682257610Sandi
187df957b36SAndreas Gohrif (!function_exists('utf8_romanize')) {
188*0a8df03fSAndreas Gohr    /** @deprecated 2019-06-09 */
189f41bbe4cSAndreas Gohr    function utf8_romanize($str)
190f41bbe4cSAndreas Gohr    {
191*0a8df03fSAndreas Gohr        dbg_deprecated(Clean::class . '::romanize()');
1920da4ba1bSAndreas Gohr        return Clean::romanize($str);
1938a831f2bSAndreas Gohr    }
194df957b36SAndreas Gohr}
1958a831f2bSAndreas Gohr
196df957b36SAndreas Gohrif (!function_exists('utf8_stripspecials')) {
197*0a8df03fSAndreas Gohr    /** @deprecated 2019-06-09 */
198f41bbe4cSAndreas Gohr    function utf8_stripspecials($str, $repl = '', $additional = '')
199f41bbe4cSAndreas Gohr    {
200*0a8df03fSAndreas Gohr        dbg_deprecated(Clean::class . '::stripspecials()');
2010da4ba1bSAndreas Gohr        return Clean::stripspecials($str, $repl, $additional);
202099ada41Sandi    }
203df957b36SAndreas Gohr}
204099ada41Sandi
205df957b36SAndreas Gohrif (!function_exists('utf8_strpos')) {
206*0a8df03fSAndreas Gohr    /** @deprecated 2019-06-09 */
207f41bbe4cSAndreas Gohr    function utf8_strpos($haystack, $needle, $offset = 0)
208f41bbe4cSAndreas Gohr    {
209*0a8df03fSAndreas Gohr        dbg_deprecated(PhpString::class . '::strpos()');
2100da4ba1bSAndreas Gohr        return PhpString::strpos($haystack, $needle, $offset);
21172de9068SAndreas Gohr    }
212df957b36SAndreas Gohr}
213f29317c1Sandi
214df957b36SAndreas Gohrif (!function_exists('utf8_tohtml')) {
215*0a8df03fSAndreas Gohr    /** @deprecated 2019-06-09 */
216f41bbe4cSAndreas Gohr    function utf8_tohtml($str)
217f41bbe4cSAndreas Gohr    {
218*0a8df03fSAndreas Gohr        dbg_deprecated(Conversion::class . '::toHtml()');
2190da4ba1bSAndreas Gohr        return Conversion::toHtml($str);
2209f9fb0e5STom N Harris    }
221df957b36SAndreas Gohr}
2229f9fb0e5STom N Harris
223df957b36SAndreas Gohrif (!function_exists('utf8_unhtml')) {
224*0a8df03fSAndreas Gohr    /** @deprecated 2019-06-09 */
225f41bbe4cSAndreas Gohr    function utf8_unhtml($str, $enties = false)
226f41bbe4cSAndreas Gohr    {
227*0a8df03fSAndreas Gohr        dbg_deprecated(Conversion::class . '::fromHtml()');
2280da4ba1bSAndreas Gohr        return Conversion::fromHtml($str, $enties);
229ea2eed85Sandi    }
230df957b36SAndreas Gohr}
231ea2eed85Sandi
232df957b36SAndreas Gohrif (!function_exists('utf8_to_unicode')) {
233*0a8df03fSAndreas Gohr    /** @deprecated 2019-06-09 */
234f41bbe4cSAndreas Gohr    function utf8_to_unicode($str, $strict = false)
235f41bbe4cSAndreas Gohr    {
236*0a8df03fSAndreas Gohr        dbg_deprecated(Conversion::class . '::fromUtf8()');
2370da4ba1bSAndreas Gohr        return Unicode::fromUtf8($str, $strict);
23882257610Sandi    }
239df957b36SAndreas Gohr}
24082257610Sandi
241df957b36SAndreas Gohrif (!function_exists('unicode_to_utf8')) {
242*0a8df03fSAndreas Gohr    /** @deprecated 2019-06-09 */
243f41bbe4cSAndreas Gohr    function unicode_to_utf8($arr, $strict = false)
244f41bbe4cSAndreas Gohr    {
245*0a8df03fSAndreas Gohr        dbg_deprecated(Conversion::class . '::toUtf8()');
2460da4ba1bSAndreas Gohr        return Unicode::toUtf8($arr, $strict);
24782257610Sandi    }
248df957b36SAndreas Gohr}
24982257610Sandi
250df957b36SAndreas Gohrif (!function_exists('utf8_to_utf16be')) {
251*0a8df03fSAndreas Gohr    /** @deprecated 2019-06-09 */
252f41bbe4cSAndreas Gohr    function utf8_to_utf16be($str, $bom = false)
253f41bbe4cSAndreas Gohr    {
254*0a8df03fSAndreas Gohr        dbg_deprecated(Conversion::class . '::toUtf16be()');
2550da4ba1bSAndreas Gohr        return Conversion::toUtf16be($str, $bom);
25615fa0b4fSAndreas Gohr    }
257df957b36SAndreas Gohr}
25815fa0b4fSAndreas Gohr
259df957b36SAndreas Gohrif (!function_exists('utf16be_to_utf8')) {
260*0a8df03fSAndreas Gohr    /** @deprecated 2019-06-09 */
261f41bbe4cSAndreas Gohr    function utf16be_to_utf8($str)
262f41bbe4cSAndreas Gohr    {
263*0a8df03fSAndreas Gohr        dbg_deprecated(Conversion::class . '::fromUtf16be()');
2640da4ba1bSAndreas Gohr        return Conversion::fromUtf16be($str);
26515fa0b4fSAndreas Gohr    }
266df957b36SAndreas Gohr}
26715fa0b4fSAndreas Gohr
268df957b36SAndreas Gohrif (!function_exists('utf8_bad_replace')) {
269*0a8df03fSAndreas Gohr    /** @deprecated 2019-06-09 */
270f41bbe4cSAndreas Gohr    function utf8_bad_replace($str, $replace = '')
271f41bbe4cSAndreas Gohr    {
272*0a8df03fSAndreas Gohr        dbg_deprecated(Clean::class . '::replaceBadBytes()');
2730da4ba1bSAndreas Gohr        return Clean::replaceBadBytes($str, $replace);
2740eac1afbSAndreas Gohr    }
275df957b36SAndreas Gohr}
276ab77016bSAndreas Gohr
277df957b36SAndreas Gohrif (!function_exists('utf8_correctIdx')) {
278*0a8df03fSAndreas Gohr    /** @deprecated 2019-06-09 */
279f41bbe4cSAndreas Gohr    function utf8_correctIdx($str, $i, $next = false)
280f41bbe4cSAndreas Gohr    {
281*0a8df03fSAndreas Gohr        dbg_deprecated(Clean::class . '::correctIdx()');
2820da4ba1bSAndreas Gohr        return Clean::correctIdx($str, $i, $next);
2835953e889Schris    }
284df957b36SAndreas Gohr}
285