2008-01-29(Tue)
PHPでのXML処理(attributeの値が日本語(UTF-8))
XMLWriterを使用したが、<ほげほげ>内のattributeの値が日本語(UTF-8)だとデコードされて出力されてしまう。
例)
<message Attribute1="text_1"Attribute2="日本語">データ2</message>
ブラウザで見る分には問題ないので放置していたが、担当者はエディッタで内容確認が出来ないと嫌らしい。
#DBからデータを取ってきているので内容がおかしいのはDB登録の時点で発生するんだけどね~。
#そもそもブラウザに表示されるものなので、エディッタで確認ってのがわからない。
大体がxmlファイルの設計が悪いと思うんだけど、、、
Attributeにエラーメッセージを書くようにするなんてさ。
XMLパーサーでIDを渡して、取得しずらいじゃん。
批判しても権力がないので、長いものに巻かれることにして実験しました。
1.Simple XML で作成し、DOMでWriteしてみる。
Attribute内でもデコードされないで日本語が出力されましたが、出力後のXMLファイルがうまく整形されないので駄目。
2.DOMで作成し、DOMでWriteする。
これだとメモリーは食うが、デコードされないで日本語が出力され、整形もOK.
但し、XMLWriterの様に、indentが設定できないので、indentは半角空白になります。
下記に実験コードを示す。
以上。
例)
<message Attribute1="text_1"Attribute2="日本語">データ2</message>
ブラウザで見る分には問題ないので放置していたが、担当者はエディッタで内容確認が出来ないと嫌らしい。
#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");
?>
以上。
- 関連記事
-
- PHPでのXML処理(attributeの値が日本語(UTF-8)) (2008/01/29)
- PHP 5.1以降 XMLWriter (2007/11/06)