1--TEST-- 2GH-10648 (mb_check_encoding() returns true for incorrect but interpretable ISO-2022-JP byte sequences) 3--EXTENSIONS-- 4mbstring 5--FILE-- 6<?php 7 8$testcases = [ 9 'ISO-2022-JP bytes' => '1b244224221b2842', // 'あ' in ISO-2022-JP 10 'ISO-2022-JP bytes without escape sequence' => '1b24422422', // 'ア' in JIS 11 'JIS X 0201 7bit kana with escape sequence' => '1b2849311b2842', // 'ア' in JIS 12 'JIS X 0201 7bit kana with SO/SI' => '0e310f', // 'ア' in JIS 13 'JIS X 0201 8bit kana' => 'b1', // 'ア' in JIS 14 'JIS X 0201 7bit kana with SO and ESC' => '0e311b2842', // 'ア' in JIS 15 'JIS X 0201 7bit kana with ESC and SI' => '1b2849310f', // 'ア' in JIS 16 'JIS X 0208 character' => '1b244242641b2842', // '鯛' in JIS and ISO-2022-JP, included in JIS X 0208 17 'JIS X 0212 character' => '1b2428446a591b2842', // '鮋' in JIS, included in JIS X 0212 18 'JIS X 0213 character' => '1b2428507d4c1b2842', // '' in ISO-2022-JP-2004, included in JIS X 0213 19 'JIS C 6220-1969 ESC ( H' => '1b284a1b2848', // an escape sequence transitioning to ASCII 20 'SO/SI when not in ASCII mode' => '1b284a0e0f1b2842', // an escape sequence transitioning to ASCII 21]; 22 23foreach ($testcases as $title => $case) { 24 echo $title . PHP_EOL; 25 echo 'JIS:' . PHP_EOL; 26 var_dump(mb_check_encoding(hex2bin($case), 'JIS')); 27 echo mb_convert_encoding(hex2bin($case), 'UTF-8', 'JIS'). PHP_EOL; 28 var_dump(mb_get_info('illegal_chars')); 29 echo 'ISO-2022-JP:' . PHP_EOL; 30 var_dump(mb_check_encoding(hex2bin($case), 'ISO-2022-JP')); 31 echo mb_convert_encoding(hex2bin($case), 'UTF-8', 'ISO-2022-JP'). PHP_EOL; 32 var_dump(mb_get_info('illegal_chars')); 33 echo PHP_EOL; 34} 35?> 36--EXPECT-- 37ISO-2022-JP bytes 38JIS: 39bool(true) 40あ 41int(0) 42ISO-2022-JP: 43bool(true) 44あ 45int(0) 46 47ISO-2022-JP bytes without escape sequence 48JIS: 49bool(false) 50あ 51int(0) 52ISO-2022-JP: 53bool(false) 54あ 55int(0) 56 57JIS X 0201 7bit kana with escape sequence 58JIS: 59bool(true) 60ア 61int(0) 62ISO-2022-JP: 63bool(false) 64ア 65int(0) 66 67JIS X 0201 7bit kana with SO/SI 68JIS: 69bool(true) 70ア 71int(0) 72ISO-2022-JP: 73bool(false) 74ア 75int(0) 76 77JIS X 0201 8bit kana 78JIS: 79bool(true) 80ア 81int(0) 82ISO-2022-JP: 83bool(false) 84ア 85int(0) 86 87JIS X 0201 7bit kana with SO and ESC 88JIS: 89bool(false) 90ア 91int(0) 92ISO-2022-JP: 93bool(false) 94ア 95int(0) 96 97JIS X 0201 7bit kana with ESC and SI 98JIS: 99bool(false) 100ア 101int(0) 102ISO-2022-JP: 103bool(false) 104ア 105int(0) 106 107JIS X 0208 character 108JIS: 109bool(true) 110鯛 111int(0) 112ISO-2022-JP: 113bool(true) 114鯛 115int(0) 116 117JIS X 0212 character 118JIS: 119bool(true) 120鮋 121int(0) 122ISO-2022-JP: 123bool(false) 124鮋 125int(0) 126 127JIS X 0213 character 128JIS: 129bool(false) 130?$(P}L 131int(1) 132ISO-2022-JP: 133bool(false) 134?$(P}L 135int(2) 136 137JIS C 6220-1969 ESC ( H 138JIS: 139bool(true) 140 141int(2) 142ISO-2022-JP: 143bool(false) 144 145int(2) 146 147SO/SI when not in ASCII mode 148JIS: 149bool(false) 150 151int(2) 152ISO-2022-JP: 153bool(false) 154 155int(2) 156