phpでのカタカナ判別

いろんなサーバで開発を行っていると同じライブラリを使っていても正しく動作しない場合があるが、

その多くは環境設定やPHPバージョン相違によるものが多い。

以下、事例をいくつか。

1.カタカナ判別

【現象】

ユーザの入力チェックなどでカタカナかどうかをチェックするのに

if(mbereg("[^ァ-ン,ー]",$str)){
  return false;
}

みたいな判定を行っているのだが、あるサーバで正しく動かなかった。(プログラムの文字コードはEUC-JP)

【原因&対策】

php.iniの設定漏れ。

  mbstring.internal_encoding = EUC-JP

を設定すればOK。判別式の前に

  mb_regex_encoding("EUC-JP");

を追加してもOK。

2.date関数

【現象】

サーバリプレース後

  date("Y年n月j日 H:i");

の「年」が「・」に表示されてしまうようになった。(php4.3.11→5.2.6にアップ。プログラムの文字コードはSJIS)

【原因】

おそらくphpのバグ。汚い修正にて対応。

他にもなんかあったけど、忘れてしまった。。