[ズバリなご回答の方、1名様に100pt進呈!]

PHPの質問です。データーベースから抽出しXMLに変換されたデータを、他のファイル(data.xml)に書き出し保存していく方法を、どなたかご存じでしたらご教授ください。(データが更新される度に上書きされる事が望ましいです。) 

よろしくお願いします。

コード

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

回答の条件
  • URL必須
  • 1人3回まで
  • 登録:2007/04/05 16:55:56
  • 終了:2007/04/05 18:57:55

回答(1件)

id:kurukuru-neko No.1

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

ポイント100pt

DomDocumentを使っているので

echo $dom->saveXML();

で作成された文字列をファイルする

だけなら。

file_put_contents("xxx.txt",$dom->saveXML());


file_put_contents

http://jp2.php.net/manual/ja/function.file-put-contents.php

id:paper-knife

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

2007/04/05 18:57:07
  • id:kurukuru-neko
    DOMの出力エンコードを指定しないと
    出力がおかしくなる仕様のようです。

    PHPの内部エンコーディングも強制的に
    UTF-8に変更していないのも原因と思います。

    以下で修正してみてください

    $dom->encoding = "UTF-8";
    $save = mb_internal_encoding();
    mb_internal_encoding("UTF-8");
    file_put_contents(
    eucjp_to_utf8("uploaddata.txt"),
    $dom->saveXML()
    );
    mb_internal_encoding($save);

    http://www.res-system.com/weblog/item/444
  • id:kurukuru-neko

    結果期待しない結果になってすいません。

    mb_internal_encoding関数で
    内部文字コードを指定をして処理
    していないと現在の文字コードが使われます
    おそらくEUC-JP?で内部処理が
    されます。

    ><meta http-equiv="Content-Type" content="text/html; charset=UTF-8">

    一番今回の処理でスマートなのは、
    処理の最初でmb_internal_encoding関数で
    mb_language("uni");
    mb_internal_encoding("UTF-8");
    mb_http_output("UTF-8"); 
    データベース接続時の
    set names utf8
    で処理を全てUTF-8に統一する。
    ソースも全てUTF-8で記述/
    出力もUTF-8指定することです。
    (UTF-8対応のエディターが必要)

    http://www.infinity-dimensions.com/blog/archives/000114.html




  • id:kurukuru-neko

    現在利用している環境がtelnet接続経由
    の場合UTF-8対応のソフトが必要です。
    以前は商用だったものですが
    現在は無償になっているものがあります。
    Poderosa
    http://www.routrek.co.jp/product/varaterm/

    SSHに標準対応
    UTF-8/SJIS/EUC対応

    Windows .NET Framework 必要
  • id:kurukuru-neko
    XML(DOM)関係の処理が主だと
    UTF-8ですがそれ以外のEUC-JP
    が多いのであればEUC-JPで処理して
    当該部分のみUTF-8で処理すれば
    よいのとは思います。
    コード変換が沢山あるとトラブルの元ではあります。

    dreamweaverは使った事がありませんが
    dreamweaver 8だとUTF-8に対応している
    ようです。

    http://support.adobe.co.jp/faq/faq/qadoc.sv?228434+002

    >file_put_contents(
    >eucjp_to_utf8("uploaddata.txt"),

    これは勘違いでした。

    今回の場合は、
    $dom->encoding = "UTF-8";
    $save = mb_internal_encoding();
    file_put_contents("uploaddata.txt",$dom->saveXML());

    で対応できると思います。

    ソースコード上コード変換が必要な
    部分が多数ある場合は共通の処理を
    作るなどなんらかの対応を検討した方がよい
    ですが。

    あとで混乱しないように開発上のルール
    を決めた方がよいかもしらません。

    例えば 
     ソースをEUCと決めたら
     それ以外の文字コードの場合
     例えば変数などは、$utf8xxx
     等のように明確に保存されている文字コード
     を使う。
     ファイル名もxxxx-utf8.txt or xxxx.xml等
     通常とは違う約束にしたり、ディレクトリーを
     分けたり、色々な方法があります。

     大事なのは半年、1年後程度先の忘れた頃
     に見て判るかどうか?
  • id:paper-knife
    解決しました!

    むちゃくちゃ、嬉しいです!!

    何度も本当にありがとうございました!!

    ふぅぅ。

    わたしはデザイン上がりのプログラム駆け出しで、サンプリングに頼ってしまいがちでした。反省しています。もっと勉強しないといけないです。。。
    もう少し落ち着いて、設計していかないと。

    >大事なのは半年、1年後程度先の忘れた頃に見て判るかどうか?

    そうですね。それは大事だと思いました。

    コードデザインも美学ですね。

    勉強になりました!

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

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

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

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