サイト内検索

フォントサイズ

Home お仕事 PHP mysql_real_escape_stringが文字化けする
mysql_real_escape_stringが文字化けする PDF 印刷 Eメール
2009年 11月 18日(水曜日) 14:43

携帯端末をサポートするとまだまだ抜け出せないShift-JIS。UTF-8のデータベースを読み書きする必要がある場合、共通コンポーネントのデータベース読み書きモジュールはUTF-8を使用(SET NAMES utf-8;)していると、mysql_real_escape_stringが文字化けする。

そこでPHP5.2.3から登場しているmysql_set_charset。クライアントの文字コードをShift_JISに換えてくれる。

mysql_set_charset('sjis');
$str_text = mysql_real_escape_string($_POST['text']);

ただし、このやり方はナンセンス。どうせこの後に、

$str_text = mb_convert_encoding($str_text, "UTF-8", "SJIS");

をしてしまえば、セキュリティ上の問題が生じる危険性が高いので、こうするべき。

$str_text = mb_convert_encoding($_POST['text'], "UTF-8", "SJIS");
$str_id = mb_convert_encoding($_POST['id'], "UTF-8", "SJIS");
$str_text = mysql_real_escape_string($str_text);
$str_id = mysql_real_escape_string($str_id);
$sql = "UPDATE table_name SET text = '".$str_text."' WHERE id = '".$str_id."'";

じゃあ、この説明要らないじゃん・・・。

 

コメントの追加

お名前:
メールアドレス:
ホームページ:
タイトル:
コメント:
  上に表示されている文字を入力してください(小文字のみでスペースなし)。
確認ワード: