PHP5:DOM:saveXMLする際にエンコーディングを指定する方法
PHP (55 items)
2005年03月09日
XML宣言には、明示的にエンコーディング指定を記述したほうがいいでしょう。
で、PHP5のDOMでXML文字列を生成するには、saveXML関数を使用します。
しかしこのままでは、saveXML関数で生成されたXMLのXML宣言に、
エンコーディングが記述されません。
ちなみにPHP4のDOMでは、XML文字列の生成にdump_mem関数を用います。
これには引数にエンコーディング指定があったので、関数発行の際に指定できました。
で、どうするか?
<?xml version="1.0" encoding="UTF-8" ?>
で、PHP5のDOMでXML文字列を生成するには、saveXML関数を使用します。
$xml = $dom->saveXML();
しかしこのままでは、saveXML関数で生成されたXMLのXML宣言に、
エンコーディングが記述されません。
<?xml version="1.0" ?>
ちなみにPHP4のDOMでは、XML文字列の生成にdump_mem関数を用います。
これには引数にエンコーディング指定があったので、関数発行の際に指定できました。
$xml = $dom->dump_mem(true,"UTF-8");
で、どうするか?
簡単ですが、
DOMオブジェクトのエンコーディングプロパティに文字コードを指定すればOKです。
これで、XML宣言にUTF-8が明記されます。
ちなみにこの事は、PHPマニュアルには目立って記載されていないので、
意外と悩むかも知れません。
ところで、個人的な意見ですが、
PHP等でXMLを用いたプログラミングをする際は、
まずXMLをUTF-8ベースで定義し、
内部的にもUTF-8ベースで処理を行った方がいいでしょう。
もちろん、
とできますし、
EUCベースのXMLを生成する事も可能なんですが、、、
まず、XMLのデフォルトエンコーディングはUTF-8です。
そして、W3Cの規約にもUTF-8を使用することが推奨されています。
また、仮にEUC-JPベースでプログラミングした場合、
PHPであれば、mb_convert_encoding関数を用いて、
文字列のエンコード処理を至る所に記述しなければいけない可能性があります。
特に、XML内に日本語が混じるのであれば尚の事です。。
DOMオブジェクトのエンコーディングプロパティに文字コードを指定すればOKです。
$dom->encoding = "UTF-8";
$xml = $dom->saveXML();
これで、XML宣言にUTF-8が明記されます。
ちなみにこの事は、PHPマニュアルには目立って記載されていないので、
意外と悩むかも知れません。
ところで、個人的な意見ですが、
PHP等でXMLを用いたプログラミングをする際は、
まずXMLをUTF-8ベースで定義し、
内部的にもUTF-8ベースで処理を行った方がいいでしょう。
もちろん、
$dom->encoding = "EUC-JP";
$xml = $dom->saveXML();
とできますし、
<?xml version="1.0" encoding="EUC-JP" ?>
EUCベースのXMLを生成する事も可能なんですが、、、
まず、XMLのデフォルトエンコーディングはUTF-8です。
そして、W3Cの規約にもUTF-8を使用することが推奨されています。
また、仮にEUC-JPベースでプログラミングした場合、
PHPであれば、mb_convert_encoding関数を用いて、
文字列のエンコード処理を至る所に記述しなければいけない可能性があります。
特に、XML内に日本語が混じるのであれば尚の事です。。
前の記事 次の記事