検索結果を"お気に入り登録"する機能をつけたいと思い、「登録ボタン」を押すとXMLファイル(okiniiri.xml)に保存し、"お気に入り"ページ(okiniiri.php)で表示するようにしたのですが、検索結果に「長」が含まれている場合下記のエラーが発生します。
例)検索結果が「川長」の時③で下記のエラーメッセージが表示される。
Warning: SimpleXMLElement::__construct() [simplexmlelement.--construct]: okiniiri.xml:3: parser error : Input is not proper UTF-8, indicate encoding ! Bytes: 0xE9 0x95 0x3C 0x2F in 【サーバのURL】/okiniiri.php on line 28
Warning: SimpleXMLElement::__construct() [simplexmlelement.--construct]: <favorite>川�</favorite> in 【サーバのURL】/okiniiri.php on line 28
search.phpの28行目はnew SimpleXMLElementでXMLファイルを読み込んでいます。同じ動作をパソコンで行うと問題なく動作するのですが、携帯(ドコモ)だとエラーが発生します。パソコンで保存したXMLファイルを携帯で読み込むと問題なく読み込めるため携帯での保存が問題だと思うのですが、どう対処したら良いかわからず、困っています。よろしくお願いします。
ソーススクリプトを見ないと確実な回答はできない。
そのXMLファイルは冒頭で、下記のようにXML宣言を行っているか?
<?xml version="1.0" encoding="utf-8" ?>
$xml =new SimpleXMLElement('okiniiri.php', null, true);
これはどう見てもおかしなコードだ。
ご回答、ありがとうございます。
XML宣言は行っています。
原因かな・・と思っている所としてはxmlファイルの書き込みの部分です。
(文字数制限に引っかかってしまったので、とりあえず書き込みの部分
のスクリプトを記載します。)
// 検索結果の書き込み
$favorite=urldecode($favorite);
if($favorite){
$xml_array=array();
$xml =new SimpleXMLElement('okiniiri.php', null, true);
$node_num=count($xml->favorite);
// XMLファイル内に検索結果の記述があるかチェック
while($node_num >= 1){
$node_num=$node_num-1;
$sxml_array[]=$sxml->favorite[$node_num];
}
// 記述がなかったら、書き込み
if(in_array($favorite,$sxml_array) === FALSE){
$sxml->addChild('favorite',$favorite);
$sxml->asXML('okiniiri.php');
}
}