2008-11-01
文字化け(PHP+Access)対策
PHP+データベースでShift-Jisを使わなければ解決する問題なのですが
PHP+Accessって組み合わせだったので文字コードを変えることができず
(内部のシステムなのでSQLインジェクションはそれほど考慮しなくてよいのが救いでしたが。。。)
データベースに書き込む際には「'」シングルクォーテーションで囲むことで文字化けは防げると。
ただし、データの内部に「'」があるとデータが切れるので「''」シングルクォーテーションを重ねて回避
(preg_quoteのようにバックスラッシュをつけるのではダメなので、str_replaceで「’」
「’’」に置き換え
「"」ダブルクォーテーションが文字列中にあると不具合があったのですが
確認画面を表示させて、フォームのデータを「"」で囲っていたのが影響していたようで
これを「&quot」を使ってPOST(GET)してSQL文では元に戻すことで解決
足りないような気がするけど「"」「'」が使えるようになったのでひとまずこれで
参考
Sjis文字化け
CGIで特定の文字(表・予・申・能など)が文字化けする
PHP 利用時に Shift_JIS で addslashes() によるエスケープ処理に SQL インジェクション可能な穴
PHP クォーテーションについて
シングルクォーテーションとダブルクォーテーションについて
文字列内での変数展開
etc
フォームにダブルクォーテーションが含まれているとデータベースエラー
第2回 サニタイズ どこかで誰かが やっている?
SQLインジェクション対策
MS-Access + ODBC での文字コードの指定
PHP+Accessって組み合わせだったので文字コードを変えることができず
(内部のシステムなのでSQLインジェクションはそれほど考慮しなくてよいのが救いでしたが。。。)
データベースに書き込む際には「'」シングルクォーテーションで囲むことで文字化けは防げると。
ただし、データの内部に「'」があるとデータが切れるので「''」シングルクォーテーションを重ねて回避
(preg_quoteのようにバックスラッシュをつけるのではダメなので、str_replaceで「’」
「"」ダブルクォーテーションが文字列中にあると不具合があったのですが
確認画面を表示させて、フォームのデータを「"」で囲っていたのが影響していたようで
これを「&quot」を使ってPOST(GET)してSQL文では元に戻すことで解決
足りないような気がするけど「"」「'」が使えるようになったのでひとまずこれで
参考
Sjis文字化け
CGIで特定の文字(表・予・申・能など)が文字化けする
PHP 利用時に Shift_JIS で addslashes() によるエスケープ処理に SQL インジェクション可能な穴
PHP クォーテーションについて
シングルクォーテーションとダブルクォーテーションについて
文字列内での変数展開
etc
フォームにダブルクォーテーションが含まれているとデータベースエラー
第2回 サニタイズ どこかで誰かが やっている?
SQLインジェクション対策
MS-Access + ODBC での文字コードの指定
| WEB::PHP | comments (0) | trackback (0) |
コメント
コメントする
トラックバックURL
http://sv00.com/tb.php/22