1. ファイルの文字コードをコマンドで一気に変換

Web2.0を意識したシステム構築ではXMLを扱う頻度が増え、同時にデザインテンプレートやスクリプトなども文字コードをUTF-8に統一したいというシーンが出てくるのではないでしょうか。それ以外にも文字コードをディレクトリ単位で変換したいシーンがあると思います。

世の中には文字コード変換専用のフリーツールが多数存在しますが、ここではUNIXコマンドによる文字コード変換を紹介します。

1.特定ファイルの文字コードを変換する

文字コードを変換する為のコマンド[nkf]を紹介します。 nkfは入力ファイルの文字コードを自動的に認識して指定の文字コードに出力してくれます。勿論、入力ファイルの文字コードを指定する事もできます。また、改行コードなどの指定も可能です。

代表的なnkfの文字コード・改行コードの出力オプションを紹介します

  -j   JISコードの文字コードを出力する
  -e   EUCコードの文字コードを出力する
  -s   Shift-JISの文字コードを出力する
  -w   UTF-8の文字コードを出力する
  -Lu  LFの改行コードを出力する
  -Lw  CRLFの改行コードを出力する
  -Lm  CRの改行コードを出力する

などがあります。

詳細は

$man nkf

$nkf --help

をご参照ください

文字コードがEUCのexample.phpファイルをUTF-8変換して出力する。

$nkf -E -w example.php > example_utf8.php

example.phpの文字コードを自動判別してUTF-8・改行コードをLFに変換して出力する。

$nkf -w -Lu example.php > example_utf8.php

これまでは、上記のように文字コード変換を行ったファイルを、わざわざ標準出力より別名で保存していたと思います。そんなビジネスパーソンの皆様に朗報があります。

2.overwriteオプション

実はnkfコマンドにはoverwriteというオプションがあります。

example.phpをUTF-8に変換して書き換える

$nkf --overwrite -w example.php

ここまで解ってしまえば後は簡単。

3.ディレクトリ以下のPHPファイルを全てUTF-8に変換する
$find -name '*.php' | xargs nkf --overwrite -w

アイディア次第でWindowsツールいらずな所がUNIXコマンドの良いところでもありますね。

2. 携帯サイトでセッションを使用するときの落とし穴!

最近は「携帯サイト」と聞くと携帯SNSサイト、着うたサイト、懸賞サイトなどいろいろなサイトが思い浮かびます。その他にもまだまだ携帯サイトはたくさんあります。今回は携帯サイトでセッションを使用したときに、実際に起こった意外な落とし穴について紹介します。

最近の携帯は高機能で高性能なのであまり気にしないでPCサイトと同じようにセッションを使用して作成できます。一世代前の携帯(第二世代携帯電話)などを対応したサイトの場合はPOSTでの通信ができない機種が多数あるので、 GETでセッションの値を引き継ぎながら、セッションを維持しないとセッションを使用できない場合があります。
例)
http://www.sampleurl.com/index.php?PHPSESSID=1ajbpqj41r2mk8354corm0cep1

今回は過去に作成した上記のようなサイトで問題が起こりました。

Au端末のWIN型携帯でセッション値をGETで送り、情報を引き継いだ場合にセッションがうまく保持できずに、セッションが切れてしまう現象が起こりました。毎回、必ず起こる現象ではなく、たまにセッションが維持できなくなるという問題でした。

問題が起こる原因を特定しにくいのですが、 Auの携帯はCookieを保持できる機種が多いので、これとセッションの関係が原因ではないかとおもっています。まだ現象としては起こっていませんが、 Au端末に限らずCookieを保持できる携帯では上記の現象が起こる可能性もありそうです。

そこでこの上記現象を解決する方法として、

session.use_cookies:

セッション ID を保持するのに、クッキーを利用するかどうかを指定します。デフォルトは On です。

上記の値を動的に変更してあげることで対応しました。

以下はプログラムでの簡単な設定例になります。

<?php
//mobileCheck()  モバイルチェックをするユーザー定義の関数です。(中身省略
if(mobileCheck()) {
//携帯からのアクセスの場合
    //セッションはGET値で渡す(Cookieは使用しない
    
ini_set('session.use_cookies'0);

}else{
//PCサイトのアクセスの場合
    //セッション使用の際はCookieを使用する
    
ini_set('session.use_cookies'1);
}
?>

上記は携帯サイトとPCサイトが混在している場合の設定例です。サイトの用途が携帯サイトのみの場合では、php.iniの設定を直接編集するとプログラムで操作する必要はなくなります。

また、この設定は「Session Fixation(セッション固定)攻撃」の可能性がありますので、セッションに保存する内容に十分注意した上での使用を心がけましょう。

バックナンバーについて

TIPS-MLは、毎週金曜日に更新され、新しい記事が掲載されます。