電子書籍の厳選無料作品が豊富!

カテ違いでしたらすみません。

Serializerを使用し、XML出力を行い、別画面でそのXMLを読み込むという処理を行っています。
出力内容のXML文字コードはUTF-8ですが、一部漢字が文字化けしています。
UTF-8の問題なのかもしれませんが、何か解決方法やサイトがあれば教えてください。

ちなみに、化ける文字は「年齢」です。該当項目を消した時は動作します。

・XML出力側

配列にセットの時のエンコード
$val = mb_convert_encoding($val, "UTF-8", "auto");


require_once "XML/Serializer.php";
ini_set("mbstring.intern?al_encoding","UTF-8");

$options = array(
"mode" => "simplexml" ,
"indent" => " ",
"linebreak" => "\n",
"typeHints" => false,
"addDecl" => true,
"encoding" => "UTF-8",
"rootName" => "root",
"defaultTagName" => "item",
"attributesArray" => "_attributes"
);

$Serializer = &new XML_Serializer($options);
$status = $Serializer->serialize($xmldate);

$somecontent = $Serializer->getSerializedData();

・・・

・XML読込側

require_once "XML/Unserializer.php";

$lines = file($path);
$line = implode("", $lines);
$line = mb_convert_encoding($line, $encoding, "UTF-8");

$unserializer =& new XML_Unserializer();// 解析に属性も含める$unserializer->setOption("parseAttributes", TRUE);
$success = $unserializer->unserialize($line);

if(is_object($success)) die( $success->getMessage() );
$xmldate = $unserializer->getUnserializedData();

phpのバージョンは4.3.11です。よろしくお願いします。

A 回答 (1件)

php 5.0.3ですが、特に問題なかったです。

(年齢という文字が化けない)
$val = mb_convert_encoding($val, "UTF-8", "auto");
の"auto"でなくて、エンコードを指定したらどうなりますか?
出力側がおかしいのですよね、
出力側のスクリプトの文字コードと
どういう風に(データも)書いているか、
省略せずに(症状がでる最低限の実際に実行できるソース部分を)補足して貰えますか?
    • good
    • 0
この回答へのお礼

回答ありがとうございました。返答が遅くなりすみません。

ご指摘の通り、
$val = mb_convert_encoding($val, "UTF-8", "auto");を
$val = mb_convert_encoding($val, "UTF-8", "EUC-JP");
にすれば文字化けは直りました。あまりautoは使わないほうがいいみたいですね。

配列に入れ込んでいく処理なので、長くなったこともあり略してしまいました。こんなソースでも的確な指摘ありがとうございました。

お礼日時:2005/11/08 16:54

お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!