[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 メーリングリストの案内

AltStyle によって変換されたページ (->オリジナル) /