2007年7月アーカイブ

SJISの5C文字対策

| コメント(0) | トラックバック(0)

たとえば、入力フォームで、
代表取締役とか入力すると、
代表¥取締役とかになります。

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);
    }
}

このアーカイブについて

このページには、2007年7月に書かれたブログ記事が新しい順に公開されています。

前のアーカイブは2006年12月です。

次のアーカイブは2007年11月です。

最近のコンテンツはインデックスページで見られます。過去に書かれたものはアーカイブのページで見られます。