[PHP-users 3511] Re: xml_parseを使う場合のXML ファイルの文字コード

Junichi Kuroki php-users@php.gr.jp
Tue, 13 Nov 2001 14:44:44 +0900


黒木です。

> http://php3.de/manual/ja/ref.xml.php#xml.encoding
> によれば、 XMLファイルのソースエンコーディングには、
> ISO-8859-1, US-ASCII , UTF-8だけが利用できるとあります。
<<略>>
> LinuxでいいUTF-8用の環境が構成できなかったので、出来れば
> 当面はすべてをEUCコードのみで記述したいと考えているのですが、
> やはりマニュアルに書いてあるように、マルチバイトの文字列を
> 扱いたいときにはUTF-8を選ぶべきでしょうか。

 私の場合は入力する XML は全部 EUC に統一し、読み込んでから
UTF-8 に変換してます。EUC のままで試したこともありましたが
結局 UTF-8 にしました。 理由はだいぶ前なので忘れてしまいま
したが(^^; あまりたいした理由じゃなかったと思いますが。
とりあえずこれでうまい事いってるという例で(^^;

ところで、PHP マニュアルのサンプルですと、XMLファイルの読み込み
では fread で読み込んでるのですが、このまま使用すると途中で
parse error になってしまいます。丁度 4096 文字の区切り目が文字
列の途中だったりするとうまく解析出来ないのでしょうか?

とりあえず fgets にして1行づつ処理して逃げてます。

他の方で fread でうまく処理出来ている方がいらっしゃいましたら
コツをお教え頂ければありがたいのですが。

$parser = xml_parser_create( "UTF-8" ) ;
xml_set_element_handler( $parser, "startElement", "endElement" ) ;
xml_set_character_data_handler( $parser, "characterData" ) ;
xml_set_default_handler( $parser, "defaultHandler" ) ;
$xmlfp = fopen( $xmlfile, "r" ) ;
while( $data = fgets($xmlfp, 4096) ) {
  xml_parse( $parser, i18n_convert( $data, "UTF-8", "EUC-JP" ), feof( $xmlfp ) ) ;
}
xml_parser_free( $parser ) ;
fclose( $xmlfp ) ;

(: )('')( :)(..)(: )('')( :)(..)(: )('')( :)(..)

  黒木淳一 : kuroki@mycc.co.jp
  P.S.R.C.  http://www.chamise.jp/mera/index.html

(..)( :)('')(: )(..)( :)('')(: )(..)( :)('')(: )