]> granicus.if.org Git - php/blob
6028c17008
[php] /
1 --TEST--
2 Testing substr() function
3 --FILE--
4 <?php
5
6 /* Prototype: string substr( string str, int start[, int length] )
7  * Description: Returns the portion of string specified by the start and length parameters.
8  */
9
10 $strings_array = array( NULL, "", 12345, "abcdef", "123abc", "_123abc");
11
12 $counter = 1;
13 foreach ($strings_array as $str) {
14   /* variations with two arguments */
15   /* start values >, < and = 0    */
16
17   echo ("\n--- Iteration ".$counter." ---\n");
18   echo ("\n-- Variations for two arguments --\n");
19   var_dump ( substr($str, 1) );
20   var_dump ( substr($str, 0) );
21   var_dump ( substr($str, -2) );
22
23   /* variations with three arguments */
24   /* start value variations with length values  */
25
26   echo ("\n-- Variations for three arguments --\n");
27   var_dump ( substr($str, 1, 3) );
28   var_dump ( substr($str, 1, 0) );
29   var_dump ( substr($str, 1, -3) );
30   var_dump ( substr($str, 0, 3) );
31   var_dump ( substr($str, 0, 0) );
32   var_dump ( substr($str, 0, -3) );
33   var_dump ( substr($str, -2, 3) );
34   var_dump ( substr($str, -2, 0 ) );
35   var_dump ( substr($str, -2, -3) );
36
37   $counter++;
38 }
39
40 /* variation of start and length to point to same element */
41 echo ("\n*** Testing for variations of start and length to point to same element ***\n");
42 var_dump (substr("abcde" , 2, -2) );
43 var_dump (substr("abcde" , -3, -2) );
44
45 /* Testing to return empty string when start denotes the position beyond the truncation (set by negative length) */
46 echo ("\n*** Testing for start > truncation  ***\n");
47 var_dump (substr("abcdef" , 4, -4) );
48
49 /* String with null character */
50 echo ("\n*** Testing for string with null characters ***\n");
51 var_dump (substr("abc\x0xy\x0z" ,2) );
52
53 /* String with international characters */
54 echo ("\n*** Testing for string with international characters ***\n");
55 var_dump (substr('\xIñtërnâtiônàlizætiøn',3) );
56
57 /* start <0 && -start > length */
58 echo "\n*** Start before the first char ***\n";
59 var_dump (substr("abcd" , -8) );
60
61 /* Omitting length and passing a NULL length */
62 echo "\n*** Omitting length or using NULL length ***\n";
63 var_dump (substr("abcdef" , 2) );
64 var_dump (substr("abcdef" , 2, NULL) );
65
66 echo"\nDone";
67
68 ?>
69 --EXPECT--
70 --- Iteration 1 ---
71
72 -- Variations for two arguments --
73 bool(false)
74 string(0) ""
75 string(0) ""
76
77 -- Variations for three arguments --
78 bool(false)
79 bool(false)
80 bool(false)
81 string(0) ""
82 string(0) ""
83 bool(false)
84 string(0) ""
85 string(0) ""
86 bool(false)
87
88 --- Iteration 2 ---
89
90 -- Variations for two arguments --
91 bool(false)
92 string(0) ""
93 string(0) ""
94
95 -- Variations for three arguments --
96 bool(false)
97 bool(false)
98 bool(false)
99 string(0) ""
100 string(0) ""
101 bool(false)
102 string(0) ""
103 string(0) ""
104 bool(false)
105
106 --- Iteration 3 ---
107
108 -- Variations for two arguments --
109 string(4) "2345"
110 string(5) "12345"
111 string(2) "45"
112
113 -- Variations for three arguments --
114 string(3) "234"
115 string(0) ""
116 string(1) "2"
117 string(3) "123"
118 string(0) ""
119 string(2) "12"
120 string(2) "45"
121 string(0) ""
122 string(0) ""
123
124 --- Iteration 4 ---
125
126 -- Variations for two arguments --
127 string(5) "bcdef"
128 string(6) "abcdef"
129 string(2) "ef"
130
131 -- Variations for three arguments --
132 string(3) "bcd"
133 string(0) ""
134 string(2) "bc"
135 string(3) "abc"
136 string(0) ""
137 string(3) "abc"
138 string(2) "ef"
139 string(0) ""
140 string(0) ""
141
142 --- Iteration 5 ---
143
144 -- Variations for two arguments --
145 string(5) "23abc"
146 string(6) "123abc"
147 string(2) "bc"
148
149 -- Variations for three arguments --
150 string(3) "23a"
151 string(0) ""
152 string(2) "23"
153 string(3) "123"
154 string(0) ""
155 string(3) "123"
156 string(2) "bc"
157 string(0) ""
158 string(0) ""
159
160 --- Iteration 6 ---
161
162 -- Variations for two arguments --
163 string(6) "123abc"
164 string(7) "_123abc"
165 string(2) "bc"
166
167 -- Variations for three arguments --
168 string(3) "123"
169 string(0) ""
170 string(3) "123"
171 string(3) "_12"
172 string(0) ""
173 string(4) "_123"
174 string(2) "bc"
175 string(0) ""
176 string(0) ""
177
178 *** Testing for variations of start and length to point to same element ***
179 string(1) "c"
180 string(1) "c"
181
182 *** Testing for start > truncation  ***
183 bool(false)
184
185 *** Testing for string with null characters ***
186 string(6) "c\0xy\0z"
187
188 *** Testing for string with international characters ***
189 string(26) "ñtërnâtiônàlizætiøn"
190
191 *** Start before the first char ***
192 string(4) "abcd"
193
194 *** Omitting length or using NULL length ***
195 string(4) "cdef"
196 string(4) "cdef"
197
198 Done