[PHP-users 25318] Re: mb_convert_encoding/mb_detect_encoding について

komura komura @ ma9.seikyou.ne.jp
2005年 4月 8日 (金) 02:29:11 JST


komura です。

On Thu, 07 Apr 2005 20:24:27 +0900
Yoichi Enomoto <enomoto @ jposting.co.jp> wrote:

> 榎本です.返信ありがとうございます.
> 
> 仰るように,mb_detect_encoding() の動作が怪しいですね.
> 以下の,新たなサンプルで試したところ,
> 
> <?php
> 
> $a = '商社・流通・小売';
> $b = '小売業(百貨店、専門店、スーパー、CVS他)';
> 
> echo mb_detect_encoding($a);
> echo "<br>";
> echo mb_detect_encoding($b);
> echo "<hr>";
> 
> $a = mb_convert_encoding($a, 'SJIS', 'EUC-JP');
> $b = mb_convert_encoding($b, 'SJIS', 'EUC-JP');
> 
> echo mb_detect_encoding($a);
> echo "<br>";
> echo mb_detect_encoding($b);
> 
> ?>
> 
> 4.3.10 では,前「EUC-JP」,後「SJIS」と検出されますが,
> 4.3.11 では,前後ともに「EUC-JP」のままとなりました.
> 
> 4.3.11 で mb_convert_encoding() の修正がされた際に,
> 別の関数である mb_detect_encoding() に何らかの不具合が
> 混入されたと考えるのが妥当というところでしょうか?
> 
> http://bugs.php.net/ への報告も視野に入れて,もう少し
> 様子を見たいと思います.

PHP マニュアルでは mb_detect_encoding() の引数は3つありますが、
(第3引数の bool strict は PHP 4.3.3 くらいから導入されたようです)

string mb_detect_encoding ( string str [, mixed encoding_list [, bool strict]] )

上のスクリプトの最後の部分で以下のように mb_detect_encoding() の第3引数
を TRUE にすると SJIS として検出されることを確認しました。

echo mb_detect_encoding($a, NULL, TRUE);
echo "<br>";
echo mb_detect_encoding($b, NULL, TRUE);

第2引数の NULL は 'auto' としても同じです。


詳しく調べている時間がありませんでしたので、第3引数の strict の機能などに
ついては分かりません。意味的には厳密に文字コード検出を行なうようなオプション
と思われます。

-- 
komura <komura @ ma9.seikyou.ne.jp>


PHP-users メーリングリストの案内