Quantcast
Channel: omnioo lab. record » PHP/MySQL
Viewing all articles
Browse latest Browse all 59

PHPのYEN(円)マークの処理

$
0
0

プログラミンでだいたいハマるのがメタ文字なわけですが、中でもエスケープは慣れてしまうと大したことないのですが、OSが変わったりプログラミングの環境が変わると強烈に難しくなる。中でもWindows OSの¥とMacOSのバックスラッシュ。これはかなり難しい。
MacOSでは基本的に半角の¥(YEN)は「Option + \」じゃないと入力できない。文字としてのYENはこれでいいのだけど、WindowsOSでいうところのメタ文字としてのYENはMacOSではバックスラッシュ。自分で言っていてもうどっちが何なのかわからなくなってしまうぐらいです。ここに文字コードが絡んできたら、もう殆どアウトです。

Mac環境のUTF-8では、バックスラッシュは¥とは違う扱いになるそうです。確かにMac環境で半角¥マークを入力するには、半角英数入力の状態で「Option + \(バックスラッシュ)」じゃないとダメです。
Unicodeで書く場合、Windows環境だと¥はバックスラッシュに変換されるが、Mac環境では変換されず、¥は¥マークとして扱われるよう。
Osakaフォントなどで表示していると、¥もバックスラッシュも同じ「¥」表示になるため、見分けがつかないので。Menlo Regularとかにしないとダメです。フォントによって左右されるので、特にプログラム書くときはおしゃれフォント使うとだめ。

YENマークが正しく表示されているかも定かではないので、非常に説明しずらいのですが、

$string = '¥\¥¥¥\\¥¥¥¥¥¥\¥¥¥\\\\¥¥¥\\¥¥¥¥¥¥¥¥¥¥';
$string = preg_replace( '/¥/', "¥", $string );
$string = preg_replace( '/\\\\/', "¥", $string );
というややこしいことになるわけです。上は、YEN(半角)をYEN(全角)に置換していますが、下はエスケープ処理をするためのYEN記号あるいはバックスラッシュをYEN(全角)に変換しています。自分でもこれが正しいのかどうかちょっとわかりませんが。
いずれにしろセキュリティーの問題で、半角記号系の処理を何らかの形でしないといけないという際にはYENマークそれ自体では何かクラッキングができるわけではないので特に問題はないのです。クォートや< >といった記号、など随所で処理をしてあれば大丈夫は大丈夫です。

Viewing all articles
Browse latest Browse all 59

Trending Articles