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