1--TEST--
2Test strtok() function : usage variations - with embedded nulls in the strings
3--FILE--
4<?php
5/* Prototype  : string strtok ( str $str, str $token )
6 * Description: splits a string (str) into smaller strings (tokens), with each token being delimited by any character from token
7 * Source code: ext/standard/string.c
8*/
9
10/*
11 * Testing strtok() : with embedded nulls in the strings
12*/
13
14echo "*** Testing strtok() : with embedded nulls in the strings ***\n";
15
16// defining varous strings with embedded nulls
17$strings_with_nulls = array(
18 		           "\0",
19 		           '\0',
20                           "hello\0world",
21                           "\0hel\0lo",
22                           "hello\0",
23                           "\0\0hello\tworld\0\0",
24                           "\\0he\0llo\\0",
25                           'hello\0\0'
26                           );
27
28// loop through each element of the array and check the working of strtok()
29// when supplied with different string values
30
31$counter = 1;
32foreach( $strings_with_nulls as $string )  {
33  echo "\n--- Iteration $counter ---\n";
34  var_dump( strtok($string, "\0") );
35  for($count = 1; $count <= 5; $count++)  {
36    var_dump( strtok("\0") );
37  }
38  $counter++;
39}
40
41
42echo "Done\n";
43?>
44--EXPECTF--
45*** Testing strtok() : with embedded nulls in the strings ***
46
47--- Iteration 1 ---
48bool(false)
49bool(false)
50bool(false)
51bool(false)
52bool(false)
53bool(false)
54
55--- Iteration 2 ---
56string(2) "\0"
57bool(false)
58bool(false)
59bool(false)
60bool(false)
61bool(false)
62
63--- Iteration 3 ---
64string(5) "hello"
65string(5) "world"
66bool(false)
67bool(false)
68bool(false)
69bool(false)
70
71--- Iteration 4 ---
72string(3) "hel"
73string(2) "lo"
74bool(false)
75bool(false)
76bool(false)
77bool(false)
78
79--- Iteration 5 ---
80string(5) "hello"
81bool(false)
82bool(false)
83bool(false)
84bool(false)
85bool(false)
86
87--- Iteration 6 ---
88string(11) "hello	world"
89bool(false)
90bool(false)
91bool(false)
92bool(false)
93bool(false)
94
95--- Iteration 7 ---
96string(4) "\0he"
97string(5) "llo\0"
98bool(false)
99bool(false)
100bool(false)
101bool(false)
102
103--- Iteration 8 ---
104string(9) "hello\0\0"
105bool(false)
106bool(false)
107bool(false)
108bool(false)
109bool(false)
110Done
111