[PHP-users 27303] Re: mb_strwidth() の結果が期待と異なる
Seiji Masugata
s.masugata @ digicom.dnp.co.jp
2005年 10月 26日 (水) 11:16:33 JST
こんにちわ、桝形です。
ドタバタしてたので、連絡が遅れましてスミマセン。
> これって、PHP4.3.11以降(?)はEUC-JPではなくeucJP-winを使うのが
> 無難という事になりますか?
> EUC-JPで僕の期待通りに動かないというケースがmb_strwidth()だけで
> あれば、EUC-JPでも良いのかなと思うのですが、他のmb_系関数も
> 何かあったりするのでしょうか。
文字コードについては自分も詳しくないので識者の意見を参考にして
頂きたいトコロですが、
http://dev.mysql.com/doc/refman/4.1/ja/charset-cp932.html
このページが参考になるのかなぁ。。。という気がします。
> > いくつかの文字については、sjisとcp932で ucs2との変換ルールが異なる。以下の表ではその違いを説明している。
という辺りです。
----------------------------------------------------------------------
<?php
$string = "−";
echo bin2hex( mb_convert_encoding( $string, "SJIS", "EUC-JP" ) )."\n";
echo bin2hex( mb_convert_encoding( $string, "SJIS-win", "EUC-JP" ) )."\n";
echo bin2hex( mb_convert_encoding( $string, "SJIS", " eucJP-win" ) )."\n";
echo bin2hex( mb_convert_encoding( $string, "SJIS-win", "eucJP-win" ) )."\n";
$string = mb_convert_encoding( $string, "SJIS-win", "eucJP-win" );
echo bin2hex( mb_convert_encoding( $string, "UCS2", "SJIS" ) )."\n";
echo bin2hex( mb_convert_encoding( $string, "UCS2", "SJIS-win" ) )."\n";
echo bin2hex( mb_convert_encoding( $string, "UCS4", "SJIS" ) )."\n";
echo bin2hex( mb_convert_encoding( $string, "UCS4", "SJIS-win" ) )."\n";
?>
結果
----
817c
817c
817c
817c
2212
ff0d
00002212
0000ff0d
----------------------------------------------------------------------
> また、僕はそもそもeucJP-winの何たるかをちゃんと理解していないのですが、
> (機種依存文字を扱える、ぐらいしか知りません)
> mbstring周りの設定をEUC-JPの代わりにeucJP-winとして統一して、問題は
> 無いものなのでしょうか。
mb_strwidthについては、eucJP-win(もしくはSJIS-win)にしないといけない
感じがしますが、個人的には全体的にeucJP-winでもいいんじゃね?という気も
します。
ただ、eucJP-winとEUC−JPは厳密には違うので用途に応じて使い分ける、という
事くらいしかアドヴァイスできません。こんな回答でスミマセン。
http://bugs.php.net/bug.php?id=28220
http://www.unicode.org/Public/UNIDATA/EastAsianWidth.txt
--
Seiji Masugata <s.masugata @ digicom.dnp.co.jp>
PHP-users メーリングリストの案内