[PHP-users 12100] Re: SJISをEUC へ一括変換できませんか?nkf ??
Yasuo Ohgaki
php-users@php.gr.jp
Mon, 09 Dec 2002 11:05:42 +0900
titi@beefarm.jp wrote:
> 発言元のkisumiです。みなさんありがとうございました。
>
> qkcで一括変換できました。
>
大垣です。
# 私もfind+xargs+some_convert_command一行で変換します。
# qkcは使っていませんが、確か同じファイル名での変換をサポート
# しているのですよね?
もう収束しているようですが、参考までに、PHPスクリプトで書
くならこんな感じになります。5分くらいで作ったので、まだまだ
改良の余地が多くあります。
再帰的に変換するファイルリストを作成し、ファイルの文字エンコー
ディングをEUC-JPに変換するスクリプトです。
UNIXのコマンドを勉強する事も重要ですが、プログラムを自分で
作るのもPHPプログラミングの勉強にもなって良いと思います。
# 言語を習得するには簡単にできそうな事は、その言語で何でも
# 作ってみると取得が早いと思います。
-----------------
#!/usr/local/bin/php -n
<?php
// requires PHP4.3.0 or later php binary(CLI) for -n flag and arg handling
// Usage: script_name dir_name
// Convert char encoding to EUC-JP under dir_name
if (empty($argv[1]) || !is_dir($argv[1])) {
die("Need dir as parameter\n");
}
convert($argv[1]);
// functions
function convert($dir)
{
$files = get_file_list($dir);
if (empty($files)) {
die("Something wrong\n");
}
foreach($files as $file) {
$sjis = mb_convert_encoding(file_get_contents($file), 'EUC-JP', 'auto');
$fp = fopen($file.'.eucjp', 'w');
fputs($fp, $sjis);
}
}
function get_file_list($dir)
{
$result = array();
$dirent = opendir($dir);
readdir($dirent);readdir($dirent); // skip . and ..
while ($file = readdir($dirent)) {
$f = $dir.'/'.$file;
if (is_file($f)) {
$result[] = $f;
}
else if (is_dir($f)) {
$result += get_file_list($f);
}
}
return $result;
}
?>
--------------------
Yasuo Ohgaki