たとえば、入力フォームで、
代表取締役とか入力すると、
代表¥取締役とかになります。
php.iniの中を見てみると
magic_quotes_gpc = On
と言う一文がありますので、ここの「On」を「Off」に変更する。
これで特殊文字に自動的にエスケープ文字が付く現象を回避できます。
もしくは、stripslashes()関数を利用します。
処理例: $name = stripslashes($name);
この処理で、特殊文字に付いたエスケープ文字「¥」を除去します。
表→95 5C
5Cというのがクセモノで、メタ文字の\とかぶってしまうので、
エスケープされてしまいます。そのため、magic_quotes_gpc = On
にしていると、¥¥に変換がかかり、最後に¥が付加されます。
逆にDBに突っ込むときに、magic_quotes_gpc = Offの状態で
予定表とか代表とかそのまま突っ込むと文字が化けるかSQLエラーが起きます。
そのときはaddslashesしてあげるなりmysql_reql_escape_stringするなりで
回避してみてください。DB側で扱う文字コードによってさらにSQLエラー及び
SQLインジェクションできる状態になるので気をつけましょう。
基本的に後者のmagic_quotes_gpc = Offの状態の例が安全だと思います。
気持ち的にですけどね(笑)
コード書く人たちやポリシ次第なのでしっかりしないと痛い目みます。
初歩的なことですけど、文字コード知らない人は意外と多いので注意しましょう。
[ダメな文字一覧]
―ソЫIX噂浬欺圭構蚕十申曾箪貼能表暴予禄兔
喀媾彌拿杤歃濬畚秉綵臀藹觸軆鐔饅鷭
また、処理としては、このように関数を作成してあげると良いです。
function auto_stripslashes($str) {
if (get_magic_quotes_gpc()==1) {
return stripslashes($str);
} else {
return $str;
}
}
function auto_addslashes($str) {
if (get_magic_quotes_gpc()==1) {
return $str;
} else {
return addslashes($st);
}
}
