MySqlからCSVに吐き出す処理をしています。
テーブルの文字こーどはデフォでlatin1です。
hoge1 => 名前
hoge2 => なまえ
selectでデータに格納し文字コードを再度みてみたら?何故か下記に・・・
mb_detect_encoding($hoge1) => utf-8
mb_detect_encoding($hoge2) => ASCII
mb_convert_encoding($hoge1, 'SJIS', 'UTF-8');
mb_convert_encoding($hoge1, 'SJIS', 'ASCII');
上記をしても、SJISには変更できず文字化けします・・・
どなたかご教授ください。
よろしくです。
PHP: mb_detect_encoding - Manual
http://jp.php.net/manual/ja/function.mb-detect-encoding.php
PHP: mb_detect_order - Manual
http://jp.php.net/manual/ja/function.mb-detect-order.php
判定順序を変えてみるテスト
mb_detect_encoding($hoge1, 'sjis')
あとは php.ini のデフォルトがSJISかどうか
HTMLのメタタグでSJIS以外を設定していないかどうかといった具合に進む
今はここまで
9.3.6. 接続のキャラクタセットおよび照合順序
http://dev.mysql.com/doc/refman/4.1/ja/charset-connection.html
どの段階で文字化けが発生しているのかの切り分けが必要
まずは SET NAMES sjis を発行してからSELECTを発行するテスト実施
SET NAMES程度で直らなければphpのバージョンや php.ini の設定なども表にだす必要がある
ありがとうございます。
ちょっと進展しました。
set names ujisに設定し
selectでデータに格納し文字コードを再度みてみたら
mb_detect_encoding($hoge1) => ASCII
mb_detect_encoding($hoge2) => ASCII
ASCIIに統一されました。
PHP: mb_detect_encoding - Manual
http://jp.php.net/manual/ja/function.mb-detect-encoding.php
PHP: mb_detect_order - Manual
http://jp.php.net/manual/ja/function.mb-detect-order.php
判定順序を変えてみるテスト
mb_detect_encoding($hoge1, 'sjis')
あとは php.ini のデフォルトがSJISかどうか
HTMLのメタタグでSJIS以外を設定していないかどうかといった具合に進む
今はここまで
よくわかりません??
mb_detect_encoding($hoge1, 'sjis')
sjisで表示されますけど・・・
まずバイナリで保存するようにコンパイルしてください。
あとmysqlの文字コード設定箇所は5種類くらいあるので、よく設定法を調べてください。
ま、ちゃんとコンパイルしてないやつだと、なにをやってもむだです。
コンパイル?必要ありません。
元々のDBはデフォの設定なのでSQLはいじれません。なので、latin1から変更はできないんだよ。
それに、質問の答えになっとらん。
ひやかしか?
よくわかりません??
mb_detect_encoding($hoge1, 'sjis')
sjisで表示されますけど・・・