[php] PHP5.1 で Dom 関数を使う際の文字コード指定

結論から

$doc = new DomDocument($xml_version, $xml_encoding);

ここで指定する。あとは自動変換してくれる… と思う。UTF-8 であっても明示指定する必要がある。
また PHP スクリプト内で出力するときは PHP の internal_encoding に合わせる必要がある。

print mb_convert_encoding($doc->saveXML(), 'EUC-JP', 'UTF-8');

今はまだマニュアルも整っておらず, 自分が少しハマったのでメモ代わりにロギング。

で, 一つ困っているのが namespace の扱いで, setNamespace (マニュアルの set_namespace) が無くなった模様で namespace の定義に困っている。SimpleXML や XPath といった各 XML 関連エクステンションでネームスペースサポートが強化されたと聞いていたもののその関係で消えたのか… 期待していた appendXML (文字列を喰わせてノードに変換出来る) も validator が走って定義されていないネームスペースがあると蹴られるためネームスペースの操作が今ひとつ分からない現状では使いづらい。
DOM 関数全体の印象として XML を読む/加工するには優れているのだけど作るのには面倒が多いように思える。素直に文字列で定義してから DomDocumnet->load した方が楽かも。XML 生成のライブラリとして XMLWriter にも期待していたのだけど PHP5.1 から同梱される事になったのは XMLReader だけで Writer は同梱されないため少し採用には躊躇する。という事で今ひとつ決め手が無い。

PHP5 になって XML の扱いは劇的に改善され, 既に知名度を得た SimpleXML だけでなく DOM 関数をはじめとする XML 関数群全体が使いやすくなっている。PHP5.1 になりエラー制御やパフォーマンスが上がってより実用的になったと言える。マニュアルを読み込めば使えるので XML を扱う際には是非お試しあれ。