1 <?php
2 
3 /**
4  * UTF8 helper functions
5  *
6  * This file now only intitializes the UTF-8 capability detection and defines helper
7  * functions if needed. All actual code is in the \dokuwiki\Utf8 classes
8  *
9  * @author     Andreas Gohr <andi@splitbrain.org>
10  */
11 
12 use dokuwiki\Utf8\Clean;
13 use dokuwiki\Utf8\Conversion;
14 use dokuwiki\Utf8\PhpString;
15 use dokuwiki\Utf8\Unicode;
16 
17 /**
18  * check for mb_string support
19  */
20 if (!defined('UTF8_MBSTRING')) {
21     if (function_exists('mb_substr') && !defined('UTF8_NOMBSTRING')) {
22         define('UTF8_MBSTRING', 1);
23     } else {
24         define('UTF8_MBSTRING', 0);
25     }
26 }
27 
28 /**
29  * Check if PREG was compiled with UTF-8 support
30  *
31  * Without this many of the functions below will not work, so this is a minimal requirement
32  */
33 if (!defined('UTF8_PREGSUPPORT')) {
34     define('UTF8_PREGSUPPORT', (bool)@preg_match('/^.$/u', 'ñ'));
35 }
36 
37 /**
38  * Check if PREG was compiled with Unicode Property support
39  *
40  * This is not required for the functions below, but might be needed in a UTF-8 aware application
41  */
42 if (!defined('UTF8_PROPERTYSUPPORT')) {
43     define('UTF8_PROPERTYSUPPORT', (bool)@preg_match('/^\pL$/u', 'ñ'));
44 }
45 
46 
47 if (UTF8_MBSTRING) {
48     mb_internal_encoding('UTF-8');
49 }
50 
51 
52 if (!function_exists('utf8_isASCII')) {
53     /** @deprecated 2019-06-09 */
54     function utf8_isASCII($str)
55     {
56         dbg_deprecated(Clean::class . '::isASCII()');
57         return Clean::isASCII($str);
58     }
59 }
60 
61 
62 if (!function_exists('utf8_strip')) {
63     /** @deprecated 2019-06-09 */
64     function utf8_strip($str)
65     {
66         dbg_deprecated(Clean::class . '::strip()');
67         return Clean::strip($str);
68     }
69 }
70 
71 if (!function_exists('utf8_check')) {
72     /** @deprecated 2019-06-09 */
73     function utf8_check($str)
74     {
75         dbg_deprecated(Clean::class . '::isUtf8()');
76         return Clean::isUtf8($str);
77     }
78 }
79 
80 if (!function_exists('utf8_basename')) {
81     /** @deprecated 2019-06-09 */
82     function utf8_basename($path, $suffix = '')
83     {
84         dbg_deprecated(PhpString::class . '::basename()');
85         return PhpString::basename($path, $suffix);
86     }
87 }
88 
89 if (!function_exists('utf8_strlen')) {
90     /** @deprecated 2019-06-09 */
91     function utf8_strlen($str)
92     {
93         dbg_deprecated(PhpString::class . '::strlen()');
94         return PhpString::strlen($str);
95     }
96 }
97 
98 if (!function_exists('utf8_substr')) {
99     /** @deprecated 2019-06-09 */
100     function utf8_substr($str, $offset, $length = null)
101     {
102         dbg_deprecated(PhpString::class . '::substr()');
103         return PhpString::substr($str, $offset, $length);
104     }
105 }
106 
107 if (!function_exists('utf8_substr_replace')) {
108     /** @deprecated 2019-06-09 */
109     function utf8_substr_replace($string, $replacement, $start, $length = 0)
110     {
111         dbg_deprecated(PhpString::class . '::substr_replace()');
112         return PhpString::substr_replace($string, $replacement, $start, $length);
113     }
114 }
115 
116 if (!function_exists('utf8_ltrim')) {
117     /** @deprecated 2019-06-09 */
118     function utf8_ltrim($str, $charlist = '')
119     {
120         dbg_deprecated(PhpString::class . '::ltrim()');
121         return PhpString::ltrim($str, $charlist);
122     }
123 }
124 
125 if (!function_exists('utf8_rtrim')) {
126     /** @deprecated 2019-06-09 */
127     function utf8_rtrim($str, $charlist = '')
128     {
129         dbg_deprecated(PhpString::class . '::rtrim()');
130         return PhpString::rtrim($str, $charlist);
131     }
132 }
133 
134 if (!function_exists('utf8_trim')) {
135     /** @deprecated 2019-06-09 */
136     function utf8_trim($str, $charlist = '')
137     {
138         dbg_deprecated(PhpString::class . '::trim()');
139         return PhpString::trim($str, $charlist);
140     }
141 }
142 
143 if (!function_exists('utf8_strtolower')) {
144     /** @deprecated 2019-06-09 */
145     function utf8_strtolower($str)
146     {
147         dbg_deprecated(PhpString::class . '::strtolower()');
148         return PhpString::strtolower($str);
149     }
150 }
151 
152 if (!function_exists('utf8_strtoupper')) {
153     /** @deprecated 2019-06-09 */
154     function utf8_strtoupper($str)
155     {
156         dbg_deprecated(PhpString::class . '::strtoupper()');
157         return PhpString::strtoupper($str);
158     }
159 }
160 
161 if (!function_exists('utf8_ucfirst')) {
162     /** @deprecated 2019-06-09 */
163     function utf8_ucfirst($str)
164     {
165         dbg_deprecated(PhpString::class . '::ucfirst()');
166         return PhpString::ucfirst($str);
167     }
168 }
169 
170 if (!function_exists('utf8_ucwords')) {
171     /** @deprecated 2019-06-09 */
172     function utf8_ucwords($str)
173     {
174         dbg_deprecated(PhpString::class . '::ucwords()');
175         return PhpString::ucwords($str);
176     }
177 }
178 
179 if (!function_exists('utf8_deaccent')) {
180     /** @deprecated 2019-06-09 */
181     function utf8_deaccent($str, $case = 0)
182     {
183         dbg_deprecated(Clean::class . '::deaccent()');
184         return Clean::deaccent($str, $case);
185     }
186 }
187 
188 if (!function_exists('utf8_romanize')) {
189     /** @deprecated 2019-06-09 */
190     function utf8_romanize($str)
191     {
192         dbg_deprecated(Clean::class . '::romanize()');
193         return Clean::romanize($str);
194     }
195 }
196 
197 if (!function_exists('utf8_stripspecials')) {
198     /** @deprecated 2019-06-09 */
199     function utf8_stripspecials($str, $repl = '', $additional = '')
200     {
201         dbg_deprecated(Clean::class . '::stripspecials()');
202         return Clean::stripspecials($str, $repl, $additional);
203     }
204 }
205 
206 if (!function_exists('utf8_strpos')) {
207     /** @deprecated 2019-06-09 */
208     function utf8_strpos($haystack, $needle, $offset = 0)
209     {
210         dbg_deprecated(PhpString::class . '::strpos()');
211         return PhpString::strpos($haystack, $needle, $offset);
212     }
213 }
214 
215 if (!function_exists('utf8_tohtml')) {
216     /** @deprecated 2019-06-09 */
217     function utf8_tohtml($str, $all = false)
218     {
219         dbg_deprecated(Conversion::class . '::toHtml()');
220         return Conversion::toHtml($str, $all);
221     }
222 }
223 
224 if (!function_exists('utf8_unhtml')) {
225     /** @deprecated 2019-06-09 */
226     function utf8_unhtml($str, $enties = false)
227     {
228         dbg_deprecated(Conversion::class . '::fromHtml()');
229         return Conversion::fromHtml($str, $enties);
230     }
231 }
232 
233 if (!function_exists('utf8_to_unicode')) {
234     /** @deprecated 2019-06-09 */
235     function utf8_to_unicode($str, $strict = false)
236     {
237         dbg_deprecated(Unicode::class . '::fromUtf8()');
238         return Unicode::fromUtf8($str, $strict);
239     }
240 }
241 
242 if (!function_exists('unicode_to_utf8')) {
243     /** @deprecated 2019-06-09 */
244     function unicode_to_utf8($arr, $strict = false)
245     {
246         dbg_deprecated(Unicode::class . '::toUtf8()');
247         return Unicode::toUtf8($arr, $strict);
248     }
249 }
250 
251 if (!function_exists('utf8_to_utf16be')) {
252     /** @deprecated 2019-06-09 */
253     function utf8_to_utf16be($str, $bom = false)
254     {
255         dbg_deprecated(Conversion::class . '::toUtf16be()');
256         return Conversion::toUtf16be($str, $bom);
257     }
258 }
259 
260 if (!function_exists('utf16be_to_utf8')) {
261     /** @deprecated 2019-06-09 */
262     function utf16be_to_utf8($str)
263     {
264         dbg_deprecated(Conversion::class . '::fromUtf16be()');
265         return Conversion::fromUtf16be($str);
266     }
267 }
268 
269 if (!function_exists('utf8_bad_replace')) {
270     /** @deprecated 2019-06-09 */
271     function utf8_bad_replace($str, $replace = '')
272     {
273         dbg_deprecated(Clean::class . '::replaceBadBytes()');
274         return Clean::replaceBadBytes($str, $replace);
275     }
276 }
277 
278 if (!function_exists('utf8_correctIdx')) {
279     /** @deprecated 2019-06-09 */
280     function utf8_correctIdx($str, $i, $next = false)
281     {
282         dbg_deprecated(Clean::class . '::correctIdx()');
283         return Clean::correctIdx($str, $i, $next);
284     }
285 }
286