@@ -17,19 +17,19 @@ $sjis = base64_decode('k/qWe4zqg2WDTINYg2eCxYK3gUIwMTIzNIJUglWCVoJXgliBQg==');
1717// JIS string (BASE64 encoded)
1818$ jis = base64_decode ('GyRCRnxLXDhsJUYlLSU5JUgkRyQ5ISMbKEIwMTIzNBskQiM1IzYjNyM4IzkhIxsoQg== ' );
1919// EUC-JP string
20- $ euc_jp = ' 日本語テキストです。0123456789。 ' ;
20+ $ euc_jp = mb_convert_encoding ( " 日本語テキストです。0123456789。 " , ' EUC-JP ' , ' UTF-8 ' ) ;
2121
2222// Test for single scalar
2323echo "== SCALAR TEST == \n" ;
2424$ s = $ sjis ;
2525$ encoding = mb_convert_variables ('EUC-JP ' , 'SJIS ' , $ s );
2626print ("$ encoding \n" ); // SJIS
27- print ( " $ s \n") ; // Converted to EUC-JP
27+ echo bin2hex ( $ s ), " \n" ; // Converted to EUC-JP
2828
2929$ s = $ jis ;
3030$ encoding = mb_convert_variables ('EUC-JP ' , 'JIS ' , $ s );
3131print ("$ encoding \n" ); // JIS
32- print ( " $ s \n") ; // Converted to EUC-JP
32+ echo bin2hex ( $ s ), " \n" ; // Converted to EUC-JP
3333
3434$ s = $ euc_jp ;
3535$ encoding = mb_convert_variables ('SJIS ' , 'EUC-JP ' , $ s );
@@ -47,9 +47,7 @@ $s2 = $euc_jp;
4747$ s3 = $ euc_jp ;
4848$ encoding = mb_convert_variables ('EUC-JP ' , 'auto ' , $ s1 , $ s2 , $ s3 );
4949print ("$ 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
5351
5452// Note: Mixing encoding in array/object is not supported?
5553// Test for array
@@ -58,15 +56,13 @@ $a = array($s3, $s2, $s1);
5856$ aa = $ a ;
5957$ encoding = mb_convert_variables ('EUC-JP ' , 'auto ' , $ aa );
6058print ("$ 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
6260
6361$ a = array ($ s1 , $ s2 , $ s3 );
6462$ aa = $ a ;
6563$ encoding = mb_convert_variables ('EUC-JP ' , 'auto ' , $ aa );
6664print ("$ 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
7066
7167// Test for object
7268echo "== OBJECT TEST == \n" ;
@@ -102,19 +98,17 @@ class bar
10298 }
10399}
104100
105-
106101$ o = new foo ;
107102$ oo = $ o ;
108103$ encoding = mb_convert_variables ('EUC-JP ' , 'auto ' , $ oo );
109104print ("$ 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
111106
112107$ o = new bar ;
113108$ oo = $ o ;
114109$ encoding = mb_convert_variables ('EUC-JP ' , 'auto ' , $ oo );
115110print ("$ 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
118112
119113// Test for scalar, array and object
120114echo "== SCALAR, ARRAY AND OBJECT TEST == \n" ;
@@ -127,36 +121,79 @@ $oo = $o;
127121
128122$ encoding = mb_convert_variables ('EUC-JP ' , 'auto ' , $ s1 , $ s2 , $ s3 , $ aa , $ oo );
129123print ("$ 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" ;
133156
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" ;
134163
135164?>
136165--EXPECT--
137166== SCALAR TEST ==
138167SJIS
139- 日本語テキストです。0123456789。
168+ c6fccbdcb8eca5c6a5ada5b9a5c8a4c7a4b9a1a33031323334a3b5a3b6a3b7a3b8a3b9a1a3
140169JIS
141- 日本語テキストです。0123456789。
170+ c6fccbdcb8eca5c6a5ada5b9a5c8a4c7a4b9a1a33031323334a3b5a3b6a3b7a3b8a3b9a1a3
142171EUC-JP
143172k/qWe4zqg2WDTINYg2eCxYK3gUIwMTIzNIJUglWCVoJXgliBQg==
144173EUC-JP
145174GyRCRnxLXDhsJUYlLSU5JUgkRyQ5ISMbKEIwMTIzNBskQiM1IzYjNyM4IzkhIxsoQg==
146175EUC-JP
147- 日本語テキストです。0123456789。日本語テキストです。0123456789。日本語テキストです。0123456789。
176+ c6fccbdcb8eca5c6a5ada5b9a5c8a4c7a4b9a1a33031323334a3b5a3b6a3b7a3b8a3b9a1a3c6fccbdcb8eca5c6a5ada5b9a5c8a4c7a4b9a1a33031323334a3b5a3b6a3b7a3b8a3b9a1a3c6fccbdcb8eca5c6a5ada5b9a5c8a4c7a4b9a1a33031323334a3b5a3b6a3b7a3b8a3b9a1a3
148177== ARRAY TEST ==
149178EUC-JP
150- 日本語テキストです。0123456789。日本語テキストです。0123456789。日本語テキストです。0123456789。
179+ c6fccbdcb8eca5c6a5ada5b9a5c8a4c7a4b9a1a33031323334a3b5a3b6a3b7a3b8a3b9a1a3c6fccbdcb8eca5c6a5ada5b9a5c8a4c7a4b9a1a33031323334a3b5a3b6a3b7a3b8a3b9a1a3c6fccbdcb8eca5c6a5ada5b9a5c8a4c7a4b9a1a33031323334a3b5a3b6a3b7a3b8a3b9a1a3
151180EUC-JP
152- 日本語テキストです。0123456789。日本語テキストです。0123456789。日本語テキストです。0123456789。
181+ c6fccbdcb8eca5c6a5ada5b9a5c8a4c7a4b9a1a33031323334a3b5a3b6a3b7a3b8a3b9a1a3c6fccbdcb8eca5c6a5ada5b9a5c8a4c7a4b9a1a33031323334a3b5a3b6a3b7a3b8a3b9a1a3c6fccbdcb8eca5c6a5ada5b9a5c8a4c7a4b9a1a33031323334a3b5a3b6a3b7a3b8a3b9a1a3
153182== OBJECT TEST ==
154183EUC-JP
155- 日本語テキストです。0123456789。日本語テキストです。0123456789。日本語テキストです。0123456789。
184+ c6fccbdcb8eca5c6a5ada5b9a5c8a4c7a4b9a1a33031323334a3b5a3b6a3b7a3b8a3b9a1a3c6fccbdcb8eca5c6a5ada5b9a5c8a4c7a4b9a1a33031323334a3b5a3b6a3b7a3b8a3b9a1a3c6fccbdcb8eca5c6a5ada5b9a5c8a4c7a4b9a1a33031323334a3b5a3b6a3b7a3b8a3b9a1a3
156185EUC-JP
157- 日本語テキストです。0123456789。日本語テキストです。0123456789。日本語テキストです。0123456789。
186+ c6fccbdcb8eca5c6a5ada5b9a5c8a4c7a4b9a1a33031323334a3b5a3b6a3b7a3b8a3b9a1a3c6fccbdcb8eca5c6a5ada5b9a5c8a4c7a4b9a1a33031323334a3b5a3b6a3b7a3b8a3b9a1a3c6fccbdcb8eca5c6a5ada5b9a5c8a4c7a4b9a1a33031323334a3b5a3b6a3b7a3b8a3b9a1a3
158187== SCALAR, ARRAY AND OBJECT TEST ==
159188EUC-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