PHP で文字列に機種依存文字が含まれているかどうか判定するクラス

php-med-trans

PHP で与えられた文字列に機種依存文字が含まれているかどうか
判別するためのクラスを作ってみました。

使い方はコードの後で。


使い方

require('PlatformDependentChars.php');

などしたら、あとは

PlatformDependentChars::check(文字列)

で、機種依存文字がなければチェックを通過して true,
含まれていたら false を返します。

与える文字列が内部文字エンコーディングと異なる場合は
第2引数で指定してください。

PlatformDependentChars::check($str, 'EUC-JP')

クラス名が長いのを何とかしたい。

やっていること

文字列を別のエンコーディングに変換すると
機種依存文字は正しく変換されないはずなので、
それを確認しています。

基本的には日本語での使用を想定していて、
デフォルトでは与えられた文字列をいったん Shift_JIS にしてから
元の文字コードに再度変換。

元の文字列と変換後の文字列が同じなら機種依存文字なし、
どこかが異なっていれば機種依存文字が含まれているという判断です。

ただし与えられた文字列が Shift_JIS の場合
Shift_JIS から Shift_JIS に変換しても何も起きないので
そのときだけ一時変換用エンコーディングに UTF-8 を使います。

ややこしいことに
PHP でサポートされる文字エンコーディングにはエイリアスがあって
SJIS の場合は Shift_JIS, SHIFT-JIS, x-sjis
それぞれの大文字小文字違いも同じ扱いなので
そのへんを isSjis() というメソッドのあたりで処理してます。

他にいい方法があれば

勢いで作ってはみたんだけど、
何かこれじゃダメだったり
実はもっと賢いやり方があったり
もっと基本的な判定方法があったりしたら
こっそり教えてください。こっそりね。

  • このエントリーをはてなブックマークに追加