PHPからSET NAMESを使わない方が良い理由と対策まとめ | twk @ ふらっと
MySQL4なサバでは使ったりしてましたが。。
SQLの実行により文字コードが変更されるように思えるが、PHPのMySQL関連の関数で考慮される文字コードは変更されない。このため、エスケープ関数mysql_real_escape_string()等で、必要なエスケープがなされず脆弱性を引き起こすケースがある。
とのこと。mysql_set_charset()のほうを使おう!とのことです。
使いたい文字コードがShift_JISなら
入力文字列が正しい文字コードかチェックして、その上で自前のエスケープ用の関数を通せばOK
文字コードのチェックにはmb_check_encoding()またはmb_convert_encoding()を使えば良い。
自前のエスケープ用の関数では、Shift_JISの x00, n, r, , ‘, ” そして x1a をエスケープすれば良いはず。
これは良い情報ですね。古いPHPでShift_JIS使う時には覚えておこう。
関連する記事:
- preg_quoteで特殊文字をエスケープ
- Smartyで日本語などのマルチバイト文字をmb_strimwidthで丸める時の注意。
- 「ああああああああああああ」という文字列をstrlenで取得すると 24と出てほしいのに、36と表示されてしまいます。 なぜでしょうか??
- フォーム送信で文字化けの罠
- PHP: http_build_query – Manual
Powered by MightyAdsense
最近のコメント