[PHP-users 27297] Re: mb_strwidth() の結果が期待と異なる
Seiji Masugata
s.masugata @ digicom.dnp.co.jp
2005年 10月 25日 (火) 13:30:12 JST
こんにちわ、桝形です。
> この動作が"正しい"動作なのかどうかは僕には判りかねるのですが、
> 例外として?幅が2として取れないケースがあるのであれば、そこら辺
> 何らかの形で明らかになっていると幸せです。
この件、ちょっと調べてみました。
----------------------------------------------------------------------
<?php
$string = "99条99丁目1−11";
$enc = "EUC-JP"; // ←←←←←←←← ココ
mb_internal_encoding($enc);
print "mb_strwidth(): " . mb_strwidth($string, $enc) . "\n";
print "mb_strlen(): " . mb_strlen($string, $enc) . "\n";
$string = "−";
print "mb_strwidth(): " . mb_strwidth($string, $enc) . "\n";
print "mb_strlen(): " . mb_strlen($string, $enc) . "\n";
?>
結果
----
mb_strwidth(): 21
mb_strlen(): 11
mb_strwidth(): 1
mb_strlen(): 1
----------------------------------------------------------------------
ではなくて、
----------------------------------------------------------------------
<?php
$string = "99条99丁目1−11";
$enc = "eucJP-win"; // ←←←←←←←← ココ
mb_internal_encoding($enc);
print "mb_strwidth(): " . mb_strwidth($string, $enc) . "\n";
print "mb_strlen(): " . mb_strlen($string, $enc) . "\n";
$string = "−";
print "mb_strwidth(): " . mb_strwidth($string, $enc) . "\n";
print "mb_strlen(): " . mb_strlen($string, $enc) . "\n";
?>
結果
----
mb_strwidth(): 22
mb_strlen(): 11
mb_strwidth(): 2
mb_strlen(): 1
----------------------------------------------------------------------
としてみたら、どうでしょうか。「eucJP-win」が重要です。
----------------------------------------------------------------------
<?php
$string = "−";
print bin2hex( mb_convert_encoding( $string, "UTF-8", "EUC-JP" ) ). "\n";
print bin2hex( mb_convert_encoding( $string, "UTF-8", "eucJP-win" ) ). "\n";
?>
結果
----
e28892
efbc8d
----------------------------------------------------------------------
--
Seiji Masugata <s.masugata @ digicom.dnp.co.jp>
PHP-users メーリングリストの案内