[PHP-users 35185] Re: UTF-8 での escapeshellcmd の文字化けについて

KOYAMA Tetsuji koyama @ hoge.org
2010年 5月 3日 (月) 20:50:20 JST


小山です。

2010/5/2  <phpsenyo @ yahoo.co.jp>:
> UTF-8のエンコードでescapeshellcmdを実行すると特定文字が文字化けします。
>
> 具体的には
> echo escapeshellcmd("あいうえお") ;
> とすると、「あいっ??お」となり、一文字ずつ確認していくと「う」が原因とな
> っていました。

再現する最小のコードで、問題点を明確にするのが良いと思います。
escapeshellcmd() は内部で php_mblen() を用いているので、これは多くの環境の
場合 OS の mblen() を呼び出します。つまり locale によって挙動が変わるということ
ですね。

以下のコードを UTF-8 で保存して実行すると、何が出力されますか?

<?php
$locale = setlocale(LC_ALL, 'ja_JP.UTF-8');
var_dump($locale);

$str = 'う';
var_dump($str, bin2hex($str));

$out = escapeshellcmd($str);
var_dump($out, bin2hex($out));



-- 
    小山哲志@テックスタイル
    koyama @ techstyle.jp : http://techstyle.jp/
    koyama @ hoge.org : http://d.hatena.ne.jp/koyhoge/


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