それマグで!

知識はカップより、マグでゆっくり頂きます。 takuya_1stのブログ

習慣に早くから配慮した者は、 おそらく人生の実りも大きい。

PHPでNKFの代わりに文字コード変換コマンド作成してバッチで使う

バッチ用の文字コード変換をPHP
EUC-JP⇒UTF8変換をパイプで行う。
コマンドラインで文字コード変換する。nkfの使い方を調べるのが面倒だったので、コード書いた。
電車の中でネットにつながらなかった。apt-getで入らなかったので、仕方なく作った。

意外と使える。パイプ

PHPでパイプを使うプログラム作成したが、意外とこれが簡単で。PHPで標準出力・入力を使うサンプルとして公開しておく。

一つのファイルを変換

cat foo.txt | ./encode.php 

まとめて変換

for $i in `ls` ;do cat $i | ./encode.php > $.utf8.txt ;done

encode.php

#!/usr/bin/php
<?php

$str = file_get_contents("php://stdin");
$str = mb_convert_encoding($str, "utf-8", "euc-jp");
file_put_contents("php://stdout", $str	);

php://stdin と php://stdoutについて

詳しくはココに掲載されている.


サポートされるプロトコル/ラッパー ⇒ PHP 入出力ストリーム

http://jp.php.net/manual/ja/wrappers.php.php

PHP 5.2.1 より前のバージョンでは、これに関連する挙動にバグがあります。 これらのラッパーを使うのではなく、定数 STDIN, STDOUT および STDERR を使用することを推奨します。

今回は、STDOUT/STDINのペアを利用したが、出力にphp://temp や php://memoryを利用すると、ob_start多段ネストでコードの可読性低下を防ぐことが出来そうだね。