みんなの「教えて(疑問・質問)」にみんなで「答える」Q&Aコミュニティ

こんにちはゲストさん。会員登録(無料)して質問・回答してみよう!

解決済みの質問

PHP+MyAdmin INSERT文字化け

PHPを利用しテキストファイルのアップロード、その後ファイルを読込INSERT。
上記のような流れでデータベースに値を代入するスクリプトを作成中ですが
タイトルの通り、代入すると文字化けが起こり、上手く代入する事が出来ません。。。
初歩的なご質問かと思いますが宜しくお願いします。


データベース
・phpMyAdmin さくらインターネット レンタルサーバー利用
・全てUTF-8のカラム設定

PHP/HTMLファイル
・全てUTF-8フォーマットにて保存・アップロード

INSERTに利用するファイル
・某サイトよりダウンロードしたSJISフォーマットのテキストファイル(タブ区切り)

実際の動作(1)
1.テキストファイルダウンロード
2.ブラウザよりテキストファイルアップロード
3.ブラウザよりテキストファイル読込・代入
【結果】文字化け発生

実際の動作(2)
1.テキストファイルダウンロード
2.一度テキストエディタで開きSJIS⇒UTF-8へ保存
3.FileZillaにてサーバーへアップロード
4.ブラウザよりテキストファイル読込・代入
【結果】正常

実際の動作(3)
アップロードするPHPへ
mb_convert_encoding($FILE,"UTF-8","AUTO")
mb_convert_encoding($FILE,"UTF-8","SJIS")
mb_convert_encoding($FILE,"UTF-8","SJIS-WIN")
等の記述を変更しながら実験
【結果】文字化け発生

Googleにて色々検索しマルチバイト関数を有効にとの情報があり
http://manual.xwd.jp/ref.mbstring.html
を参考に設定
(1)(2)(3)を実行するが文字化けは変わらず。

アップロード後の文字エンコード判定を実施
http://www.phppro.jp/qa/388
・ダウンロードそのままをブラウザよりアップロード
・テキストダウンロード後、エディタにてUTF-8に保存したファイルをブラウザよりアップロード
どちらもSJISと判定される。

記述方法も曖昧なまま
setlocale(LC_ALL, 'ja_JP.UTF-8');
も実験しましたが無理でした。

SQL実行前に
$test = mysql_query('SET NAMES utf8', $link) or die("文字コードを指定できませんでした。");
$test = mysql_query($sql, $link) or die("クエリの送信に失敗しました。");
の記述も問題なのでしょうか。

問題はアップロード時に問題、、、?
サーバー側の設定の問題、、、?
正直お手上げです。(涙

どうかご教授お願いいたします。

投稿日時 - 2012-09-11 10:24:01

QNo.7691907

困ってます

質問者が選んだベストアンサー

(2)の手順で、エディターできちんとutf8 に変換してから、phpに読み込みさせると、php側は、何も変換しないで、MySQLへinsertして、表示も化けないのですから、
(1)の1ダウンロード後に、utf8に変換して、変換後ファイルを指定して、ファイルアップロードすれば問題ないと思うけど。filezillaが改行コードも変換してるなら、エディターでの保存時に改行コードもunix用\n にしてくれるエディターを使えば、ブラウザからのアップロードもfilezillaでやってるのと同じになるはず。

(3)は、どういうデータにどの時点で変換作業してるのか不明

投稿日時 - 2012-09-11 13:41:17

このQ&Aは役に立ちましたか?

0人が「このQ&Aが役に立った」と投票しています

回答(1)

あなたにオススメの質問