[PHP-users 27292] Re: mb_strwidth()の結果が期待と異なる
    Shu Sawada
    luna @ lunanet.gr.jp
       
    2005年 10月 25日 (火) 01:33:23 JST
    
    
  
さわだです。
この事象は、4.3.11でアップデートされたlibmbflの影響だったりする
でしょうか?(根拠ありませんが)
とりあえずmb_strwidth()を使うにはどうすればいいかと、悪あがきして
みました。
-----
<?php
    mb_internal_encoding("EUC-JP");
    $string = "\〜‖−¢£¬";
    print "string:" . $string . "\n";
    print "mb_strwidth:" . mb_strwidth($string) . "\n";
    print "my_mb_strwidth:" . my_mb_strwidth($string) . "\n";
    /*
    print "a1c0:" . mb_strwidth( hex2bin('a1c0') ) . "\n";
    print "a1c1:" . mb_strwidth( hex2bin('a1c1') ) . "\n";
    print "a1c2:" . mb_strwidth( hex2bin('a1c2') ) . "\n";
    print "a1dd:" . mb_strwidth( hex2bin('a1dd') ) . "\n";
    print "a1f1:" . mb_strwidth( hex2bin('a1f1') ) . "\n";
    print "a1f2:" . mb_strwidth( hex2bin('a1f2') ) . "\n";
    print "a2cc:" . mb_strwidth( hex2bin('a2cc') ) . "\n";
    */
function my_mb_strwidth( $string )
{
    $plus = 0;
    //FULLWIDTH REVERSE SOLIDUS
    //$plus += mb_substr_count($string, hex2bin('a1c0'), "EUC-JP");
    //FULLWIDTH TILDE
    //$plus += mb_substr_count($string, hex2bin('a1c1'), "EUC-JP");
    //PARALLEL TO
    $plus += mb_substr_count($string, hex2bin('a1c2'), "EUC-JP");
    //FULLWIDTH HYPHEN-MINUS
    $plus += mb_substr_count($string, hex2bin('a1dd'), "EUC-JP");
    //FULLWIDTH CENT SIGN
    $plus += mb_substr_count($string, hex2bin('a1f1'), "EUC-JP");
    //FULLWIDTH POUND SIGN
    $plus += mb_substr_count($string, hex2bin('a1f2'), "EUC-JP");
    //FULLWIDTH NOT SIGN
    $plus += mb_substr_count($string, hex2bin('a2cc'), "EUC-JP");
    return( mb_strwidth($string) + $plus );
}
function hex2bin($hex)
{
    $len = strlen($hex);
    return pack("H" . $len, $hex);
}
?>
-----
mb_strwidth()を使う必要があるときは、こんな感じで逃げれば
良いのでしょうか?
ext/mbstring/libmbfl/filters/mbfilter_euc_jp_win.c で特別に分岐
しているものを無理やり幅=2にしているだけです。
ただ、どの文字の幅を何故判定できないのかがよく判っていない、というか、
ここら辺の話は難しくて、、、
#使わないのが一番手っ取り早い?
#そもそも再現が僕の手元だけだったらすみません。
たぶん何かを間違っていると思います。
どの文字が危険、というのが判ると非常にありがたいです。
識者の方、ご教示いただけないでしょうか。
何卒宜しくお願いいたします。
-- 
Shu Sawada
http://luna.lunanet.gr.jp/
    
    
PHP-users メーリングリストの案内