1--TEST--
2Test mb_substr() function : usage variations - test different encodings
3--SKIPIF--
4<?php
5extension_loaded('mbstring') or die('skip');
6function_exists('mb_substr') or die("skip mb_substr() is not available in this build");
7?>
8--FILE--
9<?php
10/* Prototype  : string mb_substr(string $str, int $start [, int $length [, string $encoding]])
11 * Description: Returns part of a string
12 * Source code: ext/mbstring/mbstring.c
13 */
14
15/*
16 * Pass all encodings listed on php.net to test that function recognises them.
17 * NB: The strings passed are *NOT* necessarily encoded in the encoding passed to the function.
18 * This test is purely to see whether the function recognises the encoding.
19 */
20
21echo "*** Testing mb_substr() : usage variations ***\n";
22
23$encoding = array('UCS-4',			/*1*/
24                  'UCS-4BE',
25                  'UCS-4LE',
26                  'UCS-2',
27                  'UCS-2BE',		/*5*/
28                  'UCS-2LE',
29                  'UTF-32',
30                  'UTF-32BE',
31                  'UTF-32LE',
32                  'UTF-16',			/*10*/
33                  'UTF-16BE',
34                  'UTF-16LE',
35                  'UTF-7',
36                  'UTF7-IMAP',
37                  'UTF-8',			/*15*/
38                  'ASCII',
39                  'EUC-JP',
40                  'SJIS',
41                  'eucJP-win',
42                  'SJIS-win',		/*20*/
43                  'ISO-2022-JP',
44                  'JIS',
45                  'ISO-8859-1',
46                  'ISO-8859-2',
47                  'ISO-8859-3',		/*25*/
48                  'ISO-8859-4',
49                  'ISO-8859-5',
50                  'ISO-8859-6',
51                  'ISO-8859-7',
52                  'ISO-8859-8',		/*30*/
53                  'ISO-8859-9',
54                  'ISO-8859-10',
55                  'ISO-8859-13',
56                  'ISO-8859-14',
57                  'ISO-8859-15',	/*35*/
58                  'byte2be',
59                  'byte2le',
60                  'byte4be',
61                  'byte4le',
62                  'BASE64',			/*40*/
63                  'HTML-ENTITIES',
64                  '7bit',
65                  '8bit',
66                  'EUC-CN',
67                  'CP936',			/*45*/
68                  'HZ',
69                  'EUC-TW',
70                  'CP950',
71                  'BIG-5',
72                  'EUC-KR',			/*50*/
73                  'UHC',
74                  'ISO-2022-KR',
75                  'Windows-1251',
76                  'Windows-1252',
77                  'CP866',			/*55*/
78                  'KOI8-R');		/*56*/
79
80
81
82$iterator = 1;
83$string_ascii = 'abc def';
84//Japanese string encoded in UTF-8
85$string_mb = base64_decode('44K/44OT44Ol44Os44O844OG44Kj44Oz44Kw44O744Oe44K344O844Oz44O744Kr44Oz44OR44OL44O8');
86
87foreach($encoding as $enc) {
88	echo "\n-- Iteration $iterator: $enc --\n";
89
90	echo "-- ASCII String --\n";
91	if (mb_substr($string_ascii, 1, 5, $enc)) {
92		echo "Encoding $enc recognised\n";
93	} else {
94		echo "Encoding $enc not recognised\n";
95	}
96
97	echo "-- Multibyte String --\n";
98	if (mb_substr($string_mb, 1, 5, $enc)) {
99		echo "Encoding $enc recognised\n";
100	} else {
101		echo "Encoding $enc not recognised\n";
102	}
103}
104
105echo "Done";
106?>
107--EXPECTF--
108*** Testing mb_substr() : usage variations ***
109
110-- Iteration 1: UCS-4 --
111-- ASCII String --
112Encoding UCS-4 recognised
113-- Multibyte String --
114Encoding UCS-4 recognised
115
116-- Iteration 1: UCS-4BE --
117-- ASCII String --
118Encoding UCS-4BE recognised
119-- Multibyte String --
120Encoding UCS-4BE recognised
121
122-- Iteration 1: UCS-4LE --
123-- ASCII String --
124Encoding UCS-4LE recognised
125-- Multibyte String --
126Encoding UCS-4LE recognised
127
128-- Iteration 1: UCS-2 --
129-- ASCII String --
130Encoding UCS-2 recognised
131-- Multibyte String --
132Encoding UCS-2 recognised
133
134-- Iteration 1: UCS-2BE --
135-- ASCII String --
136Encoding UCS-2BE recognised
137-- Multibyte String --
138Encoding UCS-2BE recognised
139
140-- Iteration 1: UCS-2LE --
141-- ASCII String --
142Encoding UCS-2LE recognised
143-- Multibyte String --
144Encoding UCS-2LE recognised
145
146-- Iteration 1: UTF-32 --
147-- ASCII String --
148Encoding UTF-32 recognised
149-- Multibyte String --
150Encoding UTF-32 recognised
151
152-- Iteration 1: UTF-32BE --
153-- ASCII String --
154Encoding UTF-32BE recognised
155-- Multibyte String --
156Encoding UTF-32BE recognised
157
158-- Iteration 1: UTF-32LE --
159-- ASCII String --
160Encoding UTF-32LE recognised
161-- Multibyte String --
162Encoding UTF-32LE recognised
163
164-- Iteration 1: UTF-16 --
165-- ASCII String --
166Encoding UTF-16 recognised
167-- Multibyte String --
168Encoding UTF-16 recognised
169
170-- Iteration 1: UTF-16BE --
171-- ASCII String --
172Encoding UTF-16BE recognised
173-- Multibyte String --
174Encoding UTF-16BE recognised
175
176-- Iteration 1: UTF-16LE --
177-- ASCII String --
178Encoding UTF-16LE recognised
179-- Multibyte String --
180Encoding UTF-16LE recognised
181
182-- Iteration 1: UTF-7 --
183-- ASCII String --
184Encoding UTF-7 recognised
185-- Multibyte String --
186Encoding UTF-7 recognised
187
188-- Iteration 1: UTF7-IMAP --
189-- ASCII String --
190Encoding UTF7-IMAP recognised
191-- Multibyte String --
192Encoding UTF7-IMAP recognised
193
194-- Iteration 1: UTF-8 --
195-- ASCII String --
196Encoding UTF-8 recognised
197-- Multibyte String --
198Encoding UTF-8 recognised
199
200-- Iteration 1: ASCII --
201-- ASCII String --
202Encoding ASCII recognised
203-- Multibyte String --
204Encoding ASCII recognised
205
206-- Iteration 1: EUC-JP --
207-- ASCII String --
208Encoding EUC-JP recognised
209-- Multibyte String --
210Encoding EUC-JP recognised
211
212-- Iteration 1: SJIS --
213-- ASCII String --
214Encoding SJIS recognised
215-- Multibyte String --
216Encoding SJIS recognised
217
218-- Iteration 1: eucJP-win --
219-- ASCII String --
220Encoding eucJP-win recognised
221-- Multibyte String --
222Encoding eucJP-win recognised
223
224-- Iteration 1: SJIS-win --
225-- ASCII String --
226Encoding SJIS-win recognised
227-- Multibyte String --
228Encoding SJIS-win recognised
229
230-- Iteration 1: ISO-2022-JP --
231-- ASCII String --
232Encoding ISO-2022-JP recognised
233-- Multibyte String --
234Encoding ISO-2022-JP recognised
235
236-- Iteration 1: JIS --
237-- ASCII String --
238Encoding JIS recognised
239-- Multibyte String --
240Encoding JIS recognised
241
242-- Iteration 1: ISO-8859-1 --
243-- ASCII String --
244Encoding ISO-8859-1 recognised
245-- Multibyte String --
246Encoding ISO-8859-1 recognised
247
248-- Iteration 1: ISO-8859-2 --
249-- ASCII String --
250Encoding ISO-8859-2 recognised
251-- Multibyte String --
252Encoding ISO-8859-2 recognised
253
254-- Iteration 1: ISO-8859-3 --
255-- ASCII String --
256Encoding ISO-8859-3 recognised
257-- Multibyte String --
258Encoding ISO-8859-3 recognised
259
260-- Iteration 1: ISO-8859-4 --
261-- ASCII String --
262Encoding ISO-8859-4 recognised
263-- Multibyte String --
264Encoding ISO-8859-4 recognised
265
266-- Iteration 1: ISO-8859-5 --
267-- ASCII String --
268Encoding ISO-8859-5 recognised
269-- Multibyte String --
270Encoding ISO-8859-5 recognised
271
272-- Iteration 1: ISO-8859-6 --
273-- ASCII String --
274Encoding ISO-8859-6 recognised
275-- Multibyte String --
276Encoding ISO-8859-6 recognised
277
278-- Iteration 1: ISO-8859-7 --
279-- ASCII String --
280Encoding ISO-8859-7 recognised
281-- Multibyte String --
282Encoding ISO-8859-7 recognised
283
284-- Iteration 1: ISO-8859-8 --
285-- ASCII String --
286Encoding ISO-8859-8 recognised
287-- Multibyte String --
288Encoding ISO-8859-8 recognised
289
290-- Iteration 1: ISO-8859-9 --
291-- ASCII String --
292Encoding ISO-8859-9 recognised
293-- Multibyte String --
294Encoding ISO-8859-9 recognised
295
296-- Iteration 1: ISO-8859-10 --
297-- ASCII String --
298Encoding ISO-8859-10 recognised
299-- Multibyte String --
300Encoding ISO-8859-10 recognised
301
302-- Iteration 1: ISO-8859-13 --
303-- ASCII String --
304Encoding ISO-8859-13 recognised
305-- Multibyte String --
306Encoding ISO-8859-13 recognised
307
308-- Iteration 1: ISO-8859-14 --
309-- ASCII String --
310Encoding ISO-8859-14 recognised
311-- Multibyte String --
312Encoding ISO-8859-14 recognised
313
314-- Iteration 1: ISO-8859-15 --
315-- ASCII String --
316Encoding ISO-8859-15 recognised
317-- Multibyte String --
318Encoding ISO-8859-15 recognised
319
320-- Iteration 1: byte2be --
321-- ASCII String --
322Encoding byte2be recognised
323-- Multibyte String --
324Encoding byte2be recognised
325
326-- Iteration 1: byte2le --
327-- ASCII String --
328Encoding byte2le recognised
329-- Multibyte String --
330Encoding byte2le recognised
331
332-- Iteration 1: byte4be --
333-- ASCII String --
334Encoding byte4be recognised
335-- Multibyte String --
336Encoding byte4be recognised
337
338-- Iteration 1: byte4le --
339-- ASCII String --
340Encoding byte4le recognised
341-- Multibyte String --
342Encoding byte4le recognised
343
344-- Iteration 1: BASE64 --
345-- ASCII String --
346Encoding BASE64 recognised
347-- Multibyte String --
348Encoding BASE64 recognised
349
350-- Iteration 1: HTML-ENTITIES --
351-- ASCII String --
352Encoding HTML-ENTITIES recognised
353-- Multibyte String --
354Encoding HTML-ENTITIES recognised
355
356-- Iteration 1: 7bit --
357-- ASCII String --
358Encoding 7bit recognised
359-- Multibyte String --
360Encoding 7bit recognised
361
362-- Iteration 1: 8bit --
363-- ASCII String --
364Encoding 8bit recognised
365-- Multibyte String --
366Encoding 8bit recognised
367
368-- Iteration 1: EUC-CN --
369-- ASCII String --
370Encoding EUC-CN recognised
371-- Multibyte String --
372Encoding EUC-CN recognised
373
374-- Iteration 1: CP936 --
375-- ASCII String --
376Encoding CP936 recognised
377-- Multibyte String --
378Encoding CP936 recognised
379
380-- Iteration 1: HZ --
381-- ASCII String --
382Encoding HZ recognised
383-- Multibyte String --
384Encoding HZ recognised
385
386-- Iteration 1: EUC-TW --
387-- ASCII String --
388Encoding EUC-TW recognised
389-- Multibyte String --
390Encoding EUC-TW recognised
391
392-- Iteration 1: CP950 --
393-- ASCII String --
394Encoding CP950 recognised
395-- Multibyte String --
396Encoding CP950 recognised
397
398-- Iteration 1: BIG-5 --
399-- ASCII String --
400Encoding BIG-5 recognised
401-- Multibyte String --
402Encoding BIG-5 recognised
403
404-- Iteration 1: EUC-KR --
405-- ASCII String --
406Encoding EUC-KR recognised
407-- Multibyte String --
408Encoding EUC-KR recognised
409
410-- Iteration 1: UHC --
411-- ASCII String --
412Encoding UHC recognised
413-- Multibyte String --
414Encoding UHC recognised
415
416-- Iteration 1: ISO-2022-KR --
417-- ASCII String --
418Encoding ISO-2022-KR recognised
419-- Multibyte String --
420Encoding ISO-2022-KR recognised
421
422-- Iteration 1: Windows-1251 --
423-- ASCII String --
424Encoding Windows-1251 recognised
425-- Multibyte String --
426Encoding Windows-1251 recognised
427
428-- Iteration 1: Windows-1252 --
429-- ASCII String --
430Encoding Windows-1252 recognised
431-- Multibyte String --
432Encoding Windows-1252 recognised
433
434-- Iteration 1: CP866 --
435-- ASCII String --
436Encoding CP866 recognised
437-- Multibyte String --
438Encoding CP866 recognised
439
440-- Iteration 1: KOI8-R --
441-- ASCII String --
442Encoding KOI8-R recognised
443-- Multibyte String --
444Encoding KOI8-R recognised
445Done
446