[ズバリなご回答で100pt進呈いたします!]

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

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

回答の条件
  • URL必須
  • 1人5回まで
  • 登録:2007/04/05 12:38:33
  • 終了:2007/04/05 16:33:30

ベストアンサー

id:kurukuru-neko No.1

kurukuru-neko回答回数1844ベストアンサー獲得回数1552007/04/05 15:44:43

ポイント100pt

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"

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

id:paper-knife

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

エラーとコード。

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

2007/04/05 16:19:32

その他の回答(3件)

id:kurukuru-neko No.1

kurukuru-neko回答回数1844ベストアンサー獲得回数1552007/04/05 15:44:43ここでベストアンサー

ポイント100pt

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"

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

id:paper-knife

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

エラーとコード。

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

2007/04/05 16:19:32
id:chuken_kenkou No.2

chuken_kenkou回答回数722ベストアンサー獲得回数542007/04/05 14:10:01

ポイント10pt

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

set names utf8

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

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

id:paper-knife

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

2007/04/05 15:55:31
id:sato_hyper No.3

sato_hyper回答回数16ベストアンサー獲得回数02007/04/05 14:49:32

ポイント30pt

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")

);

id:paper-knife

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

2007/04/05 15:56:37
id:kurukuru-neko No.4

kurukuru-neko回答回数1844ベストアンサー獲得回数1552007/04/05 16:03:44

[ポイント不要]

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

います。

>foreach( ... ) {

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

が正しい

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

id:paper-knife

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

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

2007/04/05 16:32:08
  • id:kurukuru-neko
    # 多次元配列を含めて変換する場合

    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;
    };
    };
    $utf8 = Array();
    foreach( $eucstr as $key => $value ) {
    if( is_string($value) ) {
    $utf8[ $key ] = eucjp_to_utf8($value);
    } else {
    $utf8[ $key ] = $value;
    };
    };
    return $utf8;
    };
  • id:paper-knife
    教えていただいた、コードの配列は二次元配列と解釈していますが....

    とりあえず上記のコードに修正しておきます!

    わざわざありがとうござました!

この質問への反応(ブックマークコメント)

「あの人に答えてほしい」「この質問はあの人が答えられそう」というときに、回答リクエストを送ってみてましょう。

これ以上回答リクエストを送信することはできません。制限について

絞り込み :
はてなココの「ともだち」を表示します。
回答リクエストを送信したユーザーはいません