XML出力時の日本語一部文字化け
カテ違いでしたらすみません。
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です。よろしくお願いします。
お礼
早速のご回答ありがとうございます。 &と表記しておりますがうまくいきません。 フラグを立てることにより一応うまくいきました。 StartElementHandlerとEndElementHandleでフラグを無効にし、CharacterDataHandlerでフラグが有効だったらそれらの文字列を連結する処理をし、最後にフラグを有効にするという方法です。 しかし&で文字が分割されるというのはどうも解せません。 なにかもっとスマートな方法はないでしょうか。