[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 ("&lt;$name&gt;<br>\n");
}

function endElementHandler($parser, $name){
	echo ("&lt;/$name&gt;<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