2010年10月22日

[PHP-users 35375] mb_*() in 5.3.3 broken?

堀田@長崎市と申します。

mb_strlen() と mb_substr() が、バージョンによって挙動が異なるようで
困っています。なにかご存知の方、ご教示いただけますでしょうか?

m-hotta@xxxxx:~$ cat mb_substr.php
<?php
$a = '美乳テスト';

print "PHP_VERSION=".PHP_VERSION."\n";
print "language = ".ini_get('mbstring.language')."\n";
print "internal_encoding = ".ini_get('mbstring.internal_encoding')."\n";
print "strict_encoding = " .
(ini_get('mbstring.strict_encoding') ? 'true' : 'false') . "\n";
print "mb_strlen(\"$a\") = ".mb_strlen($a)."\n";
for ($i=0; $i<mb_strlen($a); $i++) {
printf("i=$i, mb_substr($a, $i, 1)=%s\n", mb_substr($a, $i, 1));
}

m-hotta@xxxxx:~$ php mb_substr.php
PHP_VERSION=5.2.8
language = Japanese
internal_encoding = UTF-8
strict_encoding = false
mb_strlen("美乳テスト") = 5
i=0, mb_substr(美乳テスト, 0, 1)=美
i=1, mb_substr(美乳テスト, 1, 1)=乳
i=2, mb_substr(美乳テスト, 2, 1)=テ
i=3, mb_substr(美乳テスト, 3, 1)=ス
i=4, mb_substr(美乳テスト, 4, 1)=ト

m-hotta@xxxxx:~/ldap-migrate$ php mb_substr.php
PHP_VERSION=5.3.3
language = Japanese
internal_encoding = UTF-8-JP
strict_encoding = false
mb_strlen("美乳テスト") = 9
i=0, mb_substr(美乳テスト, 0, 1)=?
i=1, mb_substr(美乳テスト, 1, 1)=??
i=2, mb_substr(美乳テスト, 2, 1)=??
i=3, mb_substr(美乳テスト, 3, 1)=?
i=4, mb_substr(美乳テスト, 4, 1)=?
i=5, mb_substr(美乳テスト, 5, 1)=?
i=6, mb_substr(美乳テスト, 6, 1)=??
i=7, mb_substr(美乳テスト, 7, 1)=?
i=8, mb_substr(美乳テスト, 8, 1)=?

# UTF-8-JP って…?

--
HOTTA Michihide <hotta@xxxxx>
_______________________________________________
PHP-users mailing list PHP-users@xxxxx
http://ml.php.gr.jp/mailman/listinfo/php-users
PHP初心者のためのページ - 質問する前にはこちらをお読みください
http://oldwww.php.gr.jp/php/novice.php3


投稿者 xml-rpc : 2010年10月22日 15:35
役に立ちました?:
過去のフィードバック 平均:(0) 総合:(0) 投票回数:(0)
本記事へのTrackback: http://hoop.euqset.org/blog/mt-tb2006.cgi/99399
トラックバック
コメント
コメントする




画像の中に見える文字を入力してください。