make test for 4.4.3RC1(続き)- mb_strlen編
先日の件ですが。
昨日に引き続き、今度はmb_strlen関数。
mb_strlen関数のテストが失敗していましたが、これは前からのようです(コレの「JIS」と「UTF-8」)。
って、よく見てみると「either convert_encoding or strlen has problem」って記載されてますが。
まずはテスト。
<?php declare( encoding="EUC-JP" ); echo PHP_VERSION."\n"; var_dump( mb_language( ) ); var_dump( mb_internal_encoding( ) ); $euc_jp = "0123この文字列は日本語です。EUC-JPを使っています。0123日本語は面倒臭い。"; $sjis = mb_convert_encoding($euc_jp, "SJIS" ); var_dump( strlen( $sjis ) ); mb_internal_encoding( "SJIS" ); var_dump( strlen( $sjis ) ); $jis = mb_convert_encoding( $euc_jp, "JIS" ); var_dump( strlen( $jis ) ); mb_internal_encoding( "JIS" ); var_dump( strlen( $jis ) ); $utf8 = mb_convert_encoding( $euc_jp, "UTF-8" ); var_dump( strlen( $utf8 ) ); mb_internal_encoding( "UTF-8" ); var_dump( strlen( $utf8 ) ); ?> 結果 ---- % ./php-4.3.3-cli ./mb_strlen1.php 4.3.3 string(8) "Japanese" string(9) "eucJP-win" int(72) int(72) int(126) int(126) int(188) int(188) % ./php-4.3.9-cli ./mb_strlen1.php 4.3.9 string(8) "Japanese" string(9) "eucJP-win" int(72) int(72) int(126) int(126) int(188) int(188) % ./php-4.3.11-cli ./mb_strlen1.php 4.3.11 string(8) "Japanese" string(9) "eucJP-win" int(72) int(72) int(126) int(126) int(188) int(188) % ./php-4.4.1-cli ./mb_strlen1.php 4.4.1 string(8) "Japanese" string(9) "eucJP-win" int(72) int(72) int(126) int(126) int(188) int(188) % ./php-4.4.2-cli ./mb_strlen1.php 4.4.2 string(8) "Japanese" string(9) "eucJP-win" int(72) int(72) int(126) int(126) int(188) int(188) % ./php-4.4.3RC1-cli ./mb_strlen1.php 4.4.3RC1 string(8) "Japanese" string(9) "eucJP-win" int(72) int(72) int(126) int(126) int(188) int(188)
確かに同じように失敗しています。。。。が、このプログラムは本当に正しいのでしょうか。
mb_convert_encoding関数の第3引数(from_encoding)が無いんですよねぇ。処理の途中でmb_internal_encoding関数を使って内部コードを変更しているにも関わらず。
こうなると変な変換処理になってしまうと思うんだけどなぁ。。。第3引数(from_encoding)を正しく指定した結果は以下の通り。
<?php declare( encoding="EUC-JP" ); echo PHP_VERSION."\n"; var_dump( mb_language( ) ); var_dump( mb_internal_encoding( ) ); $euc_jp = "0123この文字列は日本語です。EUC-JPを使っています。0123日本語は面倒臭い。"; $sjis = mb_convert_encoding($euc_jp, "SJIS", "EUC-JP" ); var_dump( strlen( $sjis ) ); mb_internal_encoding( "SJIS" ); var_dump( strlen( $sjis ) ); $jis = mb_convert_encoding( $euc_jp, "JIS", "EUC-JP" ); var_dump( strlen( $jis ) ); mb_internal_encoding( "JIS" ); var_dump( strlen( $jis ) ); $utf8 = mb_convert_encoding( $euc_jp, "UTF-8", "EUC-JP" ); var_dump( strlen( $utf8 ) ); mb_internal_encoding( "UTF-8" ); var_dump( strlen( $utf8 ) ); ?> 結果 ---- % ./php-4.3.3-cli ./mb_strlen2.php 4.3.3 string(8) "Japanese" string(9) "eucJP-win" int(72) int(72) int(90) int(90) int(101) int(101) % ./php-4.3.9-cli ./mb_strlen2.php 4.3.9 string(8) "Japanese" string(9) "eucJP-win" int(72) int(72) int(90) int(90) int(101) int(101) % ./php-4.3.11-cli ./mb_strlen2.php 4.3.11 string(8) "Japanese" string(9) "eucJP-win" int(72) int(72) int(90) int(90) int(101) int(101) % ./php-4.4.1-cli ./mb_strlen2.php 4.4.1 string(8) "Japanese" string(9) "eucJP-win" int(72) int(72) int(90) int(90) int(101) int(101) % ./php-4.4.2-cli ./mb_strlen2.php 4.4.2 string(8) "Japanese" string(9) "eucJP-win" int(72) int(72) int(90) int(90) int(101) int(101) % ./php-4.4.3RC1-cli ./mb_strlen2.php 4.4.3RC1 string(8) "Japanese" string(9) "eucJP-win" int(72) int(72) int(90) int(90) int(101) int(101)
意図的にやってるのかは不明ですが。。。ま、結局は期待値が間違っていたという事なのだろうか。ちょっと安心。(w
(確認した上で)テスト・プログラムを修正しておかないと。。。