PHPで中国語ファイルを読み込んでMySQLに保存する方法

このQ&Aのポイント
  • PHPで中国語が書かれたtxtファイルを読み込んでデータベースに登録したいですが、表示されるのは「?」になってしまいます。
  • txtファイルはGB2312で保存されており、PHPで表示すると正しく表示されますが、phpmyadminでは「?」と表示されます。
  • どのようにすれば中国語を正しくファイル読み込みからデータベースに保存することができるでしょうか。お教えください。
回答を見る
  • ベストアンサー

PHPから中国語ファイルを読み込み、MySQLにデータを保存する。

PHPから中国語ファイルを読み込み、MySQLにデータを保存する。 PHPで中国語が書いてあるtxtファイルを読み込み、データベースに登録させたいのですが中国語が「?」になってしまいます。 txtファイルは中国語のエンコードGB2312で保存し、PHPでsql文をechoさせるとブラウザ(ローカル)上ではちゃんと中国語で表示されています。 しかし、phpmyadminでカラムの中身を見てみると中国語であるはずの部分が全て「?」と表示されてしまいます。 色々試してみてもどうにもなりません。 大変恐縮ですがどのようにすれば中国語をファイル読み込みからデータベースに入れる事ができるのか、ご教授お願い致します。 ちなみに、phpmyadminから中国語を含むSQL文を直接入力すると中国語でちゃんカラムに入れる事はできました。

  • MySQL
  • 回答数2
  • ありがとう数8

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

  • ベストアンサー
回答No.1

こんばんは。 MySQL側の文字コードはどうなってますか?

jajianrifu
質問者

お礼

テキストファイル、とMysqlの設定をutf-8に変更したら上手く出来ました! 大変お恥ずかしいのですが、私の勘違いでした。 申し訳ありません。 有難うございました。

jajianrifu
質問者

補足

ご連絡有難う御座います。 現在はutf8_general_ciです。 gb2312_chinese_ci等も試してみましたが、上手く行きませんでした。

その他の回答 (1)

回答No.2

こんにちは。 よくわかりませんが、文字コードの問題かと・・・。 ファイルが「GB2312」。 PHPの内部文字コード(internal_encoding)が不明だけど、多分UTF-8? MySQLがUTF-8。 なので、ファイルを取り込んでからSQLで入れる前にconvert_encodingしないと駄目なのでは?

jajianrifu
質問者

お礼

テキストファイル、とMysqlの設定をutf-8に変更したら上手く出来ました! 大変お恥ずかしいのですが、私の勘違いでした。 申し訳ありません。 有難うございました。

関連するQ&A

  • phpとMySQLの連携2

    MySQLとphpとphpMyAdminを使ってWEBデータベースを構築したいと考えています。 当初からこちら http://www.comtechware.com/demo/members.php のようにエクセルのオートフィルタみたいに動くものを 作りたいと考えております。 MySQLにテーブルを作ってデータを入れることはできました。 しかしphpのサンプルの改造など模索しましたが 基本的なSQL文だけでは ファイルが作れずに行き詰っております。 phpとSQL文に関しては始めて1ヶ月程度です。 スキルが初級シスアドレベルの私には phpとSQLの入門書だけでは到底作れないレベルだと感じてきました。 どなたか参考になるサンプルをお持ちの方がいらっしゃいましたら、 いただけないでしょうか。 もちろんほぼ丸投げであることは重々承知してはおりますが 上記URLのようなのデータベースはレベルが相当高いのか、 高ければあきらめます。 念のため改造したソースを添付します。 判断材料に指針だけでもいただけないでしょうか。 宜しくお願い致します。

    • ベストアンサー
    • PHP
  • PHPサイトからMySQL内のデータを知る方法

    質問失礼いたします。 MySQLにあるデータベースをPHPサイトに表示しています。 PHPでは、 【datab.php】で、データベースへ接続し $link = mysql_connect('localhost', 'user', 'pass'); 【hyouji.php】にて、データを表示しています require_once("datab.php"); //SQL文 mysql_close($link); //データ配列 MySQL内のカラムには name , add , memo の3つがあり、PHPに表示させているのは name , add のみです。 しかし、どうやら memo にある内容が閲覧している人にわかったらしいのですが、 どこを見ても、memoの内容は表示されていません。 すみません、うまく言えないのですが… 上記にある【datab.php】の接続方法では、 MySQL内のデータがバレてしまうのでしょうか…? 原因も分からないのですが、何がお知恵をいただけたらと思います。 宜しくお願い致します。

    • ベストアンサー
    • MySQL
  • 日本語ファイルのリネームと保存

    ファイルアップデートで日本語ファイル名をリネームしてデータベースで対応付けて保存するプログラムを作成しました、そのファイルをリンクしてダウンロードする場合に元の日本語ファイル名で自動的にリネームしてPC側で保存する方法はないでしょうか。 例えば「あああ.txt」を「a.txt」にリネームして <a href="a.txt">あああ.txt</a> という風にしています、これをクリックするとa.txtになってしまいますが、あああ.txtで表示・保存するようにしたいのですが、何かうまい方法はないでしょうか。

    • ベストアンサー
    • PHP
  • PHPとMySQLを学習しているのですが・・・。

    ----------------- apache2.0.59 php5.24 MySQL5.0.45 ----------------- <?php $my_con = mysql_connect("localhost" , "hamu" , 'hamutamago'); if($my_con == false){ echo "MySQLに接続できました"; }else{ echo "MySQLに接続できました"; }; if(mysql_select_db("sample_sql")){ echo "データベース接続できました"; }else{ echo "データベース接続できませんでした"; } ?> PHPでMySQLと連動させる勉強をいましているのですが、PHPからMySQLへアクセスする事はできたのですが、自分で作成したデータベースへアクセすることができません。最初からMySQLに入っていたinformation_schemaというデータベース(?)にはアクセスできるみたいなのですが、自分で策瀬下データベースにはアクセスが出来ないようです。 なにかご存じのかたがいらっしゃいましたらよろしくお願いします。

    • ベストアンサー
    • PHP
  • PHPフォームからのMYSQL保存がマッチしない

    いつもお世話になります。 類似する質問も見つけられず、いろいろ試して悩んだ挙句、アプローチを変えてもう一度投稿することにしました。 発端は、下記のページです。 http://okwave.jp/qa/q8604578.html 問題は、phpmyadminからカラムまたはフィールドに入力したものは重複していればエラー表示されるのですが、PHPのフォームからMYSQLのデータベースに保存したもの(phpmyadmin上ではちゃんと登録されている)は重複とみなされず、エラーとして検出されません。 phpフォームからMYSQLのデータベースを呼び出してカラムまたはフィールド上に同じものがなければ保存、そうでなければエラー表示、といった形で重複させないプログラムを作成するつもりでした。 上記のページでご返信いただいたように、重複させないカラムにユニーク設定してみたのですが、問題は解決されませんでした。 文字コードが違うからと思ったのですが、MYSQL、PHPどちらもUTF-8で統一させています。 フォームからMYSQLへの保存時に問題があるのでは?と思うのですが、どのような形で修正すればうまくいくのか、わかりません。 どうか、知識の足りない私にご教授いただけないでしょうか? PHPの設定とMYSQLへの登録のプログラムは下記の通りです。 PHP・・・5.4.19 XAMPP・・・1.8.2 phpmyadmin・・・4.0.4.1 データベース文字コード(UTF-8) phpの文字コード(php.iniのdefault_characterをUTF-8に設定) <?php //データベースの接続設定 $DB_HOST = "localhost"; $DB_NAME = "○○"; $DB_USER = "○○"; $DB_PASS = "○○"; //データベースに接続する $conn = mysql_connect($DB_HOST,$DB_USER,$DB_PASS) or die("接続エラー"); mysql_select_db($DB_NAME) or die("接続エラー");        //データベース登録前にメール送信する $userID = $_POST['userID']; $password = $_POST['password']; $name = $_POST['name']; $mail1 = $_POST['mail1']; $userID = htmlspecialchars($userID); $password = htmlspecialchars($password); $name = htmlspecialchars($name); $mail1 = htmlspecialchars($mail1); $mail_sub = '登録を受け付けました。'; $mail_body = 'ご登録、誠にありがとうございました。'; $mail_body = html_entity_decode($mail_body,ENT_QUOTES,"UTF-8"); $mail_head = 'From:blowin@horae.dti.ne.jp'; mb_language('Japanese'); mb_internal_encoding("UTF-8"); mb_send_mail($mail1, $mail_sub, $mail_body,$mail_head); ?> <?php //デフォルトのタイムゾーンを日本に設定 date_default_timezone_set("Japan"); //フォーム情報をすべて受信 extract($_POST); //そのまま代入する形ではエラーが起きるため、isset関数を使ってエラー回避する if(isset($_POST['$userID'])){ $userID = cnv_dbstr($_POST['$userID']); } if(isset($_POST['$password'])){ $password = cnv_dbstr($_POST['$password']); } if(isset($_POST['$name'])){ $name = cnv_dbstr($_POST['$name']); } if(isset($_POST['$mail1'])){ $mail1 = cnv_dbstr($_POST['$mail1']); } //データを追加する $sql = "INSERT IGNORE INTO touroku(userID,password,name,email,date)"; $sql .= "VALUES( " ; $sql .= " ' " .$userID. " ', " ; $sql .= " ' " .$password. " ', " ; $sql .= " ' " .$name. " ', " ; $sql .= " ' " .$mail1. " ', " ; $sql .= " ' " .date("Y/m/d H:i:s") . " ' " ; $sql .= " ) " ; $res = mysql_query($sql,$conn) or die("データ追加エラー"); //SQLコマンド用の文字列に変換する関数 function cnv_dbstr($string){ //タグを無効にする $string = htmlspecialchars($string); //magic_quotes_gpcがOnの場合はエスケープを解除する if(get_magic_quotes_gpc()){ $string = stripslashes($string); } //SQLコマンド用の文字列にエスケープする $string = mysql_real_escape_string($string); return $string; } header('location:./testkanryou.php'); exit; ?> 大変申し訳ありませんが、どうか、よろしくお願い申し上げます。

    • 締切済み
    • PHP
  • Web上にあるSQLファイルを実行するPHPスクリプト

    レンタルサーバを借りてCMSを運営しているのですが、引越しする必要がでてきました。 新しいサーバはデータベースにはそのレンタルサーバが設置したPHPMyAdminか、契約したサーバの領域内にあるPHPファイルからしか接続できず、そのPHPMyAdminは2Mまでのファイルしか読み込めません。 200Mちょっとあるデータベースを分割して読み込もうにも、画像をデータベースに取り込んでいるCMSなので、1つのテーブルだけで2Mを越えるものもあって、全部をPHPMyAdminで読み込むことはできません。 そこで、Web上にアップロードしたSQLファイルを実行できるPHPスクリプトを探しています。 そういったスクリプトをご存知の方、いらっしゃいましたら情報をお願いします。

    • 締切済み
    • PHP
  • MySQLデータ呼出し後の日付の整形(PHP)

    MySQLのDATE型のカラムに2014-03-07 という日付が入っています。 これをPHP echo で呼び出すと、当然ですが2014-03-07と表示されます。 これを03-07 と表示したいのですが、どのような方法がありますでしょうか? よろしくお願いいたします。

    • ベストアンサー
    • PHP
  • php,mysqlにて画像パス保存/表示につい

    mysqlに画像パスを格納しておき、phpでブラウザに表示するという部分について質問があります。 以前画像を扱った際は、DBにそのまま画像データを格納していたのですが、一般的ではないということで画像パス使う方針にしました。 画像パスはthumbnailというカラムにvarcharで画像パスを格納しました。 今回ご相談させていただいた件では、主に画像の表示の部分にアドバイスをいただければと考えています。 以前画像をそのまま保存し表示するときは、get_image.phpのようなファイルを噛ませ、それをブラウザに読み込ませることで表示していたのですが、画像パスでも同じようなやり方でいいのでしょうか? ネットで調べてみたのですが、何となくしっくりこないというか、私の誤解もあるかもしれないのですがすっきりせず迷走中です。 どうか、アドバイスをご教示いただけないでしょうか。 ※以下は、試しにget_image.php噛ませてみた際のコードです。 <?php $id = $_GET['id']; //DB接続 ~省略~ $sql = "SELECT image FROM テーブル名 WHERE id='$id'"; $result = mysql_query($sql); if (!$result) { echo ("SQLの実行に失敗しました<BR>"); echo(mysql_errno().": ".mysql_error()); exit; } $row = mysql_fetch_array($result); mysql_close($con); $img_path = '$row['image']' $img = file_get_contents($img_path); header('Content-type: image/jpg'); echo $img; ?>

    • ベストアンサー
    • PHP
  • MY-SQL+PHPファイルのアップロード

    MY-SQL+PHPでファイルを保存したり読み出したりしたいと考えています。 MY-SQLにファイルの保存先を保存して、ファイルはデータベース内ではないところにおいておき、読み出したりしたいとおもっています。 ただどのように作ればいいのかわかりません。簡単なサンプルだけでもご教授していただけないでしょうか?

    • ベストアンサー
    • MySQL
  • PHPでmySQLのテーブルを作成したい

    今PHPの練習をしているのですが、作ろうとしているPHPの、 0:$tbname="データベース名"、とする。 1:データベースにアクセスする 2:アクセスしたデータベースに$tbnameと同じ名前のテーブルがあるかないかをチェック 3:同じ名前のテーブルがあるならそこで終了 4:同じ名前のテーブルがないなら、$tbnameをテーブル名、ID(INT)とNAME(CHAR)をカラム名とするテーブルを新規に作成する という動作をする部分のコードの書き方(どのようなSQL文を使えばいいのか)がわかりません。 どなたかご教示のほど、どうかよろしくお願いします。

    • ベストアンサー
    • PHP