@@ -17,19 +17,19 @@ $sjis = base64_decode('k/qWe4zqg2WDTINYg2eCxYK3gUIwMTIzNIJUglWCVoJXgliBQg==');
17
17
// JIS string (BASE64 encoded)
18
18
$ jis = base64_decode ('GyRCRnxLXDhsJUYlLSU5JUgkRyQ5ISMbKEIwMTIzNBskQiM1IzYjNyM4IzkhIxsoQg== ' );
19
19
// EUC-JP string
20
- $ euc_jp = ' 日本語テキストです。0123456789。 ' ;
20
+ $ euc_jp = mb_convert_encoding ( " 日本語テキストです。0123456789。 " , ' EUC-JP ' , ' UTF-8 ' ) ;
21
21
22
22
// Test for single scalar
23
23
echo "== SCALAR TEST == \n" ;
24
24
$ s = $ sjis ;
25
25
$ encoding = mb_convert_variables ('EUC-JP ' , 'SJIS ' , $ s );
26
26
print ("$ encoding \n" ); // SJIS
27
- print ( " $ s \n") ; // Converted to EUC-JP
27
+ echo bin2hex ( $ s ), " \n" ; // Converted to EUC-JP
28
28
29
29
$ s = $ jis ;
30
30
$ encoding = mb_convert_variables ('EUC-JP ' , 'JIS ' , $ s );
31
31
print ("$ encoding \n" ); // JIS
32
- print ( " $ s \n") ; // Converted to EUC-JP
32
+ echo bin2hex ( $ s ), " \n" ; // Converted to EUC-JP
33
33
34
34
$ s = $ euc_jp ;
35
35
$ encoding = mb_convert_variables ('SJIS ' , 'EUC-JP ' , $ s );
@@ -47,9 +47,7 @@ $s2 = $euc_jp;
47
47
$ s3 = $ euc_jp ;
48
48
$ encoding = mb_convert_variables ('EUC-JP ' , 'auto ' , $ s1 , $ s2 , $ s3 );
49
49
print ("$ encoding \n" ); // EUC-JP
50
- print ("$ s1$ s2$ s3 \n" ); // Converted to EUC-JP
51
-
52
-
50
+ echo bin2hex ("$ s1$ s2$ s3 " ), "\n" ; // Converted to EUC-JP
53
51
54
52
// Note: Mixing encoding in array/object is not supported?
55
53
// Test for array
@@ -58,15 +56,13 @@ $a = array($s3, $s2, $s1);
58
56
$ aa = $ a ;
59
57
$ encoding = mb_convert_variables ('EUC-JP ' , 'auto ' , $ aa );
60
58
print ("$ encoding \n" ); // EUC-JP
61
- print ("{$ aa [0 ]}{$ aa [1 ]}{$ aa [2 ]}\n" ) ; // Converted to EUC-JP
59
+ echo bin2hex ("{$ aa [0 ]}{$ aa [1 ]}{$ aa [2 ]}" ), " \n" ; // Converted to EUC-JP
62
60
63
61
$ a = array ($ s1 , $ s2 , $ s3 );
64
62
$ aa = $ a ;
65
63
$ encoding = mb_convert_variables ('EUC-JP ' , 'auto ' , $ aa );
66
64
print ("$ encoding \n" ); // EUC-JP
67
- print ("{$ aa [0 ]}{$ aa [1 ]}{$ aa [2 ]}\n" ); // Converted to EUC-JP
68
-
69
-
65
+ echo bin2hex ("{$ aa [0 ]}{$ aa [1 ]}{$ aa [2 ]}" ), "\n" ; // Converted to EUC-JP
70
66
71
67
// Test for object
72
68
echo "== OBJECT TEST == \n" ;
@@ -102,19 +98,17 @@ class bar
102
98
}
103
99
}
104
100
105
-
106
101
$ o = new foo ;
107
102
$ oo = $ o ;
108
103
$ encoding = mb_convert_variables ('EUC-JP ' , 'auto ' , $ oo );
109
104
print ("$ encoding \n" ); // EUC-JP
110
- print ("{$ oo ->s1 }{$ oo ->s2 }{$ oo ->s3 }\n" ) ; // Converted to EUC-JP
105
+ echo bin2hex ("{$ oo ->s1 }{$ oo ->s2 }{$ oo ->s3 }" ), " \n" ; // Converted to EUC-JP
111
106
112
107
$ o = new bar ;
113
108
$ oo = $ o ;
114
109
$ encoding = mb_convert_variables ('EUC-JP ' , 'auto ' , $ oo );
115
110
print ("$ encoding \n" ); // EUC-JP
116
- print ("{$ oo ->s1 }{$ oo ->s2 }{$ oo ->s3 }\n" ); // Converted to EUC-JP
117
-
111
+ echo bin2hex ("{$ oo ->s1 }{$ oo ->s2 }{$ oo ->s3 }" ), "\n" ; // Converted to EUC-JP
118
112
119
113
// Test for scalar, array and object
120
114
echo "== SCALAR, ARRAY AND OBJECT TEST == \n" ;
@@ -127,36 +121,79 @@ $oo = $o;
127
121
128
122
$ encoding = mb_convert_variables ('EUC-JP ' , 'auto ' , $ s1 , $ s2 , $ s3 , $ aa , $ oo );
129
123
print ("$ encoding \n" ); // EUC-JP
130
- print ("$ s1$ s2$ s3 \n" ); // Converted to EUC-JP
131
- print ("{$ aa [0 ]}{$ aa [1 ]}{$ aa [2 ]}\n" ); // Converted to EUC-JP
132
- print ("{$ oo ->s1 }{$ oo ->s2 }{$ oo ->s3 }\n" ); // Converted to EUC-JP
124
+ echo bin2hex ("$ s1$ s2$ s3 " ), "\n" ; // Converted to EUC-JP
125
+ echo bin2hex ("{$ aa [0 ]}{$ aa [1 ]}{$ aa [2 ]}" ), "\n" ; // Converted to EUC-JP
126
+ echo bin2hex ("{$ oo ->s1 }{$ oo ->s2 }{$ oo ->s3 }" ), "\n" ; // Converted to EUC-JP
127
+
128
+ echo "== DEEPLY NESTED OBJECT/ARRAY TEST == \n" ;
129
+
130
+ class Nested
131
+ {
132
+ public $ inner ;
133
+
134
+ function __construct ($ value )
135
+ {
136
+ $ this ->inner = $ value ;
137
+ }
138
+ }
139
+
140
+ $ deeplyNested = array (new Nested (array (new Nested (array (new Nested ("BLAH " ))))));
141
+
142
+ $ encoding = mb_convert_variables ('UTF-16LE ' , 'UTF-8 ' , $ deeplyNested );
143
+ echo $ encoding , "\n" ;
144
+ echo bin2hex ($ deeplyNested [0 ]->inner [0 ]->inner [0 ]->inner ), "\n" ;
145
+
146
+ echo "== INVALID STRING ENCODING TEST == \n" ;
147
+ // Make sure both that the correct invalid encoding marker is used,
148
+ // and that the count of illegal characters is incremented
149
+
150
+ $ illegalCount = mb_get_info ('illegal_chars ' );
151
+ $ nested = array (new Nested ("\xFF" ));
152
+ mb_substitute_character (0x25 );
153
+ mb_convert_variables ('UTF-16LE ' , 'UTF-8 ' , $ nested );
154
+ echo bin2hex ($ nested [0 ]->inner ), "\n" ;
155
+ echo "# of illegal characters detected: " , mb_get_info ('illegal_chars ' ) - $ illegalCount , "\n" ;
133
156
157
+ $ illegalCount = mb_get_info ('illegal_chars ' );
158
+ $ nested = array (new Nested ("\xFF" ));
159
+ mb_substitute_character (0x26 );
160
+ mb_convert_variables ('UTF-16LE ' , 'UTF-8 ' , $ nested );
161
+ echo bin2hex ($ nested [0 ]->inner ), "\n" ;
162
+ echo "# of illegal characters detected: " , mb_get_info ('illegal_chars ' ) - $ illegalCount , "\n" ;
134
163
135
164
?>
136
165
--EXPECT--
137
166
== SCALAR TEST ==
138
167
SJIS
139
- 日本語テキストです。0123456789。
168
+ c6fccbdcb8eca5c6a5ada5b9a5c8a4c7a4b9a1a33031323334a3b5a3b6a3b7a3b8a3b9a1a3
140
169
JIS
141
- 日本語テキストです。0123456789。
170
+ c6fccbdcb8eca5c6a5ada5b9a5c8a4c7a4b9a1a33031323334a3b5a3b6a3b7a3b8a3b9a1a3
142
171
EUC-JP
143
172
k/qWe4zqg2WDTINYg2eCxYK3gUIwMTIzNIJUglWCVoJXgliBQg==
144
173
EUC-JP
145
174
GyRCRnxLXDhsJUYlLSU5JUgkRyQ5ISMbKEIwMTIzNBskQiM1IzYjNyM4IzkhIxsoQg==
146
175
EUC-JP
147
- 日本語テキストです。0123456789。日本語テキストです。0123456789。日本語テキストです。0123456789。
176
+ c6fccbdcb8eca5c6a5ada5b9a5c8a4c7a4b9a1a33031323334a3b5a3b6a3b7a3b8a3b9a1a3c6fccbdcb8eca5c6a5ada5b9a5c8a4c7a4b9a1a33031323334a3b5a3b6a3b7a3b8a3b9a1a3c6fccbdcb8eca5c6a5ada5b9a5c8a4c7a4b9a1a33031323334a3b5a3b6a3b7a3b8a3b9a1a3
148
177
== ARRAY TEST ==
149
178
EUC-JP
150
- 日本語テキストです。0123456789。日本語テキストです。0123456789。日本語テキストです。0123456789。
179
+ c6fccbdcb8eca5c6a5ada5b9a5c8a4c7a4b9a1a33031323334a3b5a3b6a3b7a3b8a3b9a1a3c6fccbdcb8eca5c6a5ada5b9a5c8a4c7a4b9a1a33031323334a3b5a3b6a3b7a3b8a3b9a1a3c6fccbdcb8eca5c6a5ada5b9a5c8a4c7a4b9a1a33031323334a3b5a3b6a3b7a3b8a3b9a1a3
151
180
EUC-JP
152
- 日本語テキストです。0123456789。日本語テキストです。0123456789。日本語テキストです。0123456789。
181
+ c6fccbdcb8eca5c6a5ada5b9a5c8a4c7a4b9a1a33031323334a3b5a3b6a3b7a3b8a3b9a1a3c6fccbdcb8eca5c6a5ada5b9a5c8a4c7a4b9a1a33031323334a3b5a3b6a3b7a3b8a3b9a1a3c6fccbdcb8eca5c6a5ada5b9a5c8a4c7a4b9a1a33031323334a3b5a3b6a3b7a3b8a3b9a1a3
153
182
== OBJECT TEST ==
154
183
EUC-JP
155
- 日本語テキストです。0123456789。日本語テキストです。0123456789。日本語テキストです。0123456789。
184
+ c6fccbdcb8eca5c6a5ada5b9a5c8a4c7a4b9a1a33031323334a3b5a3b6a3b7a3b8a3b9a1a3c6fccbdcb8eca5c6a5ada5b9a5c8a4c7a4b9a1a33031323334a3b5a3b6a3b7a3b8a3b9a1a3c6fccbdcb8eca5c6a5ada5b9a5c8a4c7a4b9a1a33031323334a3b5a3b6a3b7a3b8a3b9a1a3
156
185
EUC-JP
157
- 日本語テキストです。0123456789。日本語テキストです。0123456789。日本語テキストです。0123456789。
186
+ c6fccbdcb8eca5c6a5ada5b9a5c8a4c7a4b9a1a33031323334a3b5a3b6a3b7a3b8a3b9a1a3c6fccbdcb8eca5c6a5ada5b9a5c8a4c7a4b9a1a33031323334a3b5a3b6a3b7a3b8a3b9a1a3c6fccbdcb8eca5c6a5ada5b9a5c8a4c7a4b9a1a33031323334a3b5a3b6a3b7a3b8a3b9a1a3
158
187
== SCALAR, ARRAY AND OBJECT TEST ==
159
188
EUC-JP
160
- 日本語テキストです。0123456789。日本語テキストです。0123456789。日本語テキストです。0123456789。
161
- 日本語テキストです。0123456789。日本語テキストです。0123456789。日本語テキストです。0123456789。
162
- 日本語テキストです。0123456789。日本語テキストです。0123456789。日本語テキストです。0123456789。
189
+ c6fccbdcb8eca5c6a5ada5b9a5c8a4c7a4b9a1a33031323334a3b5a3b6a3b7a3b8a3b9a1a3c6fccbdcb8eca5c6a5ada5b9a5c8a4c7a4b9a1a33031323334a3b5a3b6a3b7a3b8a3b9a1a3c6fccbdcb8eca5c6a5ada5b9a5c8a4c7a4b9a1a33031323334a3b5a3b6a3b7a3b8a3b9a1a3
190
+ c6fccbdcb8eca5c6a5ada5b9a5c8a4c7a4b9a1a33031323334a3b5a3b6a3b7a3b8a3b9a1a3c6fccbdcb8eca5c6a5ada5b9a5c8a4c7a4b9a1a33031323334a3b5a3b6a3b7a3b8a3b9a1a3c6fccbdcb8eca5c6a5ada5b9a5c8a4c7a4b9a1a33031323334a3b5a3b6a3b7a3b8a3b9a1a3
191
+ c6fccbdcb8eca5c6a5ada5b9a5c8a4c7a4b9a1a33031323334a3b5a3b6a3b7a3b8a3b9a1a3c6fccbdcb8eca5c6a5ada5b9a5c8a4c7a4b9a1a33031323334a3b5a3b6a3b7a3b8a3b9a1a3c6fccbdcb8eca5c6a5ada5b9a5c8a4c7a4b9a1a33031323334a3b5a3b6a3b7a3b8a3b9a1a3
192
+ == DEEPLY NESTED OBJECT/ARRAY TEST ==
193
+ UTF-8
194
+ 42004c0041004800
195
+ == INVALID STRING ENCODING TEST ==
196
+ 2500
197
+ # of illegal characters detected: 1
198
+ 2600
199
+ # of illegal characters detected: 1
0 commit comments