fc2ブログ
2008-01-29(Tue)

PHPでのXML処理(attributeの値が日本語(UTF-8))

XMLWriterを使用したが、<ほげほげ>内のattributeの値が日本語(UTF-8)だとデコードされて出力されてしまう。

例)
<message Attribute1="text_1"Attribute2="&#x65E5;&#x672C;&#x8A9E;"&gtデータ2&lt/message&gt

ブラウザで見る分には問題ないので放置していたが、担当者はエディッタで内容確認が出来ないと嫌らしい。
#DBからデータを取ってきているので内容がおかしいのはDB登録の時点で発生するんだけどね~。
#そもそもブラウザに表示されるものなので、エディッタで確認ってのがわからない。

大体がxmlファイルの設計が悪いと思うんだけど、、、
Attributeにエラーメッセージを書くようにするなんてさ。
XMLパーサーでIDを渡して、取得しずらいじゃん。

批判しても権力がないので、長いものに巻かれることにして実験しました。

1.Simple XML で作成し、DOMでWriteしてみる。
Attribute内でもデコードされないで日本語が出力されましたが、出力後のXMLファイルがうまく整形されないので駄目。

2.DOMで作成し、DOMでWriteする。
これだとメモリーは食うが、デコードされないで日本語が出力され、整形もOK.
但し、XMLWriterの様に、indentが設定できないので、indentは半角空白になります。

下記に実験コードを示す。


<?php
//
// DOMで作成し、DOMでWriteする
//

$dom = new DOMDocument('1.0', 'UTF-8');
// 出力はきれいに整形したいですね。
$dom->formatOutput = true;

// root node
$node_root = $dom->appendChild(new DOMElement('root'));

// table node
$node_table = $node_root->appendChild(new DOMElement('table'));

// name node
$node_name = $node_table->appendChild(new DOMElement('name', 'Default'));

// message node
$element_msg = $node_table->appendChild(new DOMElement('message'));
$attr = $element_msg->setAttribute('id', 'CEF0001');
$attr = $element_msg->setAttribute('message', 'MessageXMLにデータが存在しません。[エラー発生コード=%s]');
$dom->save("test4.xml");

?>


以上。
  1. 無料アクセス解析


関連記事

comment form

管理者にだけメッセージを送る

comment

プロフィール

lidelu

Author:lidelu
FC2ブログへようこそ!

最近の記事
最近のコメント
最近のトラックバック
月別アーカイブ
カテゴリー
ブロとも申請フォーム

この人とブロともになる

ブログ内検索
RSSフィード
リンク