PHP研究

16.「\」が入る(-_-;

ようやく掲示板を作ってみました。
やっぱり実際作って見ないとわからないことが多いですね。

今回取り上げるのは、「\」マークの話。

ログの文字コードをSJIS、
スクリプトファイルをEUC、
画面出力をSJISにして作ったんですが、
いざ投稿して見ると
「能」という字が「能\」となってしまいました。ログファイルにも同様に保存されていますので、フォームデータを受け取った時点で変換されているものと思われます。

原因は予想がつきます。
日本語は2バイトで表現されているのはご存知かと思いますが、
「能」という字はSJISコードで「945C」ですが、
この後半「5C」というコードが実は「\」なのです。
で、スクリプト内では「\」というコードは特別な意味がありまして、
「\」を「\」という文字として認識させるには「\\」としなければなりません。
PHPではそこのところを自動的に変換してくれるわけです。

PHPにはこういう便利な機能があるわけですね。
Perlだったら保存はできますが、何か処理にかけると誤動作してしまいます。

ただ、そのままログを表示すると「能」と書き込んだのに、「能\」と表示されてはかっこ悪い。
PHPには「\\」を「\」に戻す関数があります。

stripslashes($comment);

とすれば大丈夫。

今回作成した掲示板CBPでは

print mb_convert_encoding(stripslashes($comment), "EUC-JP", "SJIS");

として使っています。
文字化け対策の mb_convert_encoding() と、stripslashes() を同時に使いました。