人力検索はてな
モバイル版を表示しています。PC版はこちら
i-mobile

[ズバリなご回答で100pt進呈いたします!]
MySQLデータベースのデータの文字コード変換についての質問です。データベースの文字コードはEUC-JP(ujis)です。このデータをXMLに書き出すためにUTF-8に変換したいです。下記のコードにどのように補足すれば、解決できるのでしょうか?ご存じの方いましたら、ご教授ください!よろしくお願いします。

コード↓
http://www.paper-knife.net/prototype/datasorce.html

●質問者: paper-knife
●カテゴリ:ウェブ制作
✍キーワード:EUC-JP MySQL UTF-8 XML コード
○ 状態 :終了
└ 回答数 : 4/4件

▽最新の回答へ

1 ● kurukuru-neko
●100ポイント ベストアンサー

PHP: 不明 おそらく(euc-jp)

DB: EUC-JP(UJIS)

XML: UTF-8

EUC-JPの文字をUTF-8へ変換する関数を

ソースに埋め込む

(多次元配列には対応してません)


 function eucjp_to_utf8($eucstr) {
 if( ! is_array($eucstr) ) {
 if( is_string($eucstr) ) {
 return mb_convert_encoding($eucstr,"UTF-8","euc-jp");
 } else {
 return $eucstr;
 };
 };
 $euc = Array();
 foreach( $eucstr as $key => &$value ) {
 if( is_string($value) ) {
 $euc[ $key ] = mb_convert_encoding($value,"UTF-8","euc-jp");
 } else {
 $euc[ $key ] = $value;
 };
 };
 return $euc;
 };

変更方法はいくつかあります。

>foreach($data as $diary){

foreach($data as $eucdiary){

$diary = eucjp_to_utf8($eucdiary);

>'d_title' => $diarys['d_title'],

各代入時に

'd_title' => eucjp_to_utf8($diarys['d_title']),


EUCには

EUC-JPとeucJP-winがあります。

http://jp.php.net/manual/ja/ref.mbstring.php

PHPの内部エンコーディングを一時的に

変更して内部UTF-8に変更。

DBの結果をSQLで"set names utf-8"

を実行する手もありますが多少面倒になります。

◎質問者からの返答

挿入しましたが、下記のエラーが出てしまいました。すみませんが、もう一度ご教授いただけないでしょうか?

エラーとコード。

http://www.paper-knife.net/prototype/datasorce.html


2 ● chuken_kenkou
●10ポイント

MySQLに接続後の最初のクエリで、

set names utf8

を投げてみてはいかがでしょうか?

MySQL AB :: MySQL 4.1 リファレンスマニュアル :: 9.5 Unicode のサポート

◎質問者からの返答

試行済みでした。ありがとうございます。


3 ● sato_hyper
●30ポイント

http://php-web.net/program/mb.html

この部分を

$data[] = Array(

'id' => $diarys['id'] ,

'd_title' => $diarys['d_title'],

'd_image' => $diarys['d_image'],

'd_mes' => $diarys['d_mes'],

'd_date'=> $diarys['d_date']

);

以下の修正で問題ないと思います。

$data[] = Array(

'id' => mb_convert_encoding($diarys['id'],"UTF-8","EUC-JP") ,

'd_title' => mb_convert_encoding($diarys['d_title'],"UTF-8","EUC-JP"),

'd_image' => mb_convert_encoding($diarys['d_image'],"UTF-8","EUC-JP"),

'd_mes' => mb_convert_encoding($diarys['d_mes'],"UTF-8","EUC-JP"),

'd_date'=> mb_convert_encoding($diarys['d_date'],"UTF-8","EUC-JP")

);

◎質問者からの返答

参考ありがとうございます!助かりました。


4 ● kurukuru-neko
●0ポイント

[ポイント不要]

以下の部分は、書き込みとき変換されて

います。

>foreach( ... ) {

foreach( $eucstr as $key => &$value ) {

が正しい

http://q.hatena.ne.jp/answer

◎質問者からの返答

解決しました。ありがとうございます!

またよろしくお願いします!

関連質問


●質問をもっと探す●



0.人力検索はてなトップ
8.このページを友達に紹介
9.このページの先頭へ
対応機種一覧
お問い合わせ
ヘルプ/お知らせ
ログイン
無料ユーザー登録
はてなトップ