[PHP-users 3510] xml_parseを使う場合のXMLファイルの文字コード
Ryuzi Kambe
php-users@php.gr.jp
Tue, 13 Nov 2001 14:06:01 +0900
Linux 上で、PHP 4.0.6をxmlとmbstringを有効にしてコンパイルしたのですが、
この場合、利用できる文字コードはどのようになるでしょうか。
http://php3.de/manual/ja/ref.xml.php#xml.encoding
によれば、 XMLファイルのソースエンコーディングには、
ISO-8859-1, US-ASCII , UTF-8だけが利用できるとあります。
しかし実際に、EUC-JPのXMLファイルを、EUC-JPで書かれた
PHPのコードでパージングさせると、特にエラーを出さずに
終了しますし、startElementsHandlerなどをセットすると
その通りに動作します。
LinuxでいいUTF-8用の環境が構成できなかったので、出来れば
当面はすべてをEUCコードのみで記述したいと考えているのですが、
やはりマニュアルに書いてあるように、マルチバイトの文字列を
扱いたいときにはUTF-8を選ぶべきでしょうか。
ちなみに、
PHPをコンパイルするときにインストールしたexpatのバージョンは、
expat-1.95.2-1です。
実際にテストに用いたXMLファイルと、PHPのソースは
以下のようなごく簡単なものです。
test.xml
----------------------------------------
<?xml version="1.0" encoding="euc-jp"?>
<test>
<testchild>テスト用の文字列</testchild>
</test>
-----------------------------------------
test.xmlここまで
xmlparse.php
----------------------------------------
<?php
function startElementHandler($parser, $name, $attribs){
echo ("<$name><br>\n");
}
function endElementHandler($parser, $name){
echo ("</$name><br>\n");
}
function cdatahandler($paser, $data){
echo ("$data<br>");
}
$parser = xml_parser_create();
xml_set_element_handler($parser, "startElementHandler", "endElementHandler");
xml_set_character_data_handler($parser, "cdataHandler");
#$file = "test.xml";
if(!($fp = fopen($file, "r"))){
die("error");
}
while($data = fread($fp, 4096)){
if(!xml_parse($parser, $data, feof($fp))){
die(sprintf("XML error %d %d",
xml_get_current_line_number($parser),
xml_get_current_column_number($parser)));
}
}
?>
-----------------------------------------
xmlparse.phpここまで
--
Ryuzi Kambe
kambe@mc.kcom.ne.jp