IE7でXMLが表示できないエラーの解決策は?

このQ&Aのポイント
  • お世話になります。現在、PHP5.2とAJAXでHPを作成しています。IE7(だけ?)でXMLが表示できないエラーが発生します。XMLを吐き出すphpのプログラムをOperaブラウザでは表示できますが、IE7ブラウザからURLをたたくとエラーが表示されます。エンコードに問題があるのでしょうか?解決策を教えてください。
  • XMLを吐き出すphpのプログラムで、$dom = new DOMDocument('1.0', 'UTF-8');と指定しています。しかし、IE7ではエラーが発生し、XMLが表示できません。エンコードの問題でしょうか?解決策を教えてください。
  • $dom = new DOMDocument('1.0', 'EUC-JP');に変更すると、IE7ではワーニングが表示されます。どうすればIE7で正しくXMLを表示することができるでしょうか?エンコードについて教えてください。
回答を見る
  • ベストアンサー

IE7(だけ?)でXMLが表示できない。

IE7(だけ?)でXMLが表示できない。 お世話になります。 現在、PHP5.2とAJAXでHPを作成しています。 XMLを吐き出すphpのプログラムをOperaブラウザで 表示してできたのですが。 同じphpのプログラムを、IE7ブラウザからURLをたたくと ↓の様なエラーが発生します。 The XML page cannot be displayed Cannot view XML input using XSL style sheet. Please correct the error and then click the Refresh button, or try again later. -------------------------------------------------------------------------------- テキストの内容に無効な文字が見つかりました。リソース 'http://….php' の実行エラーです。ライン 2、位置 45 <root><ctg_info><ctg_cd>1</ctg_cd><ctg_name> なぜなのでしょうか? 解決策を教えてください。 エンコードに問題があるのでしょうか?? どうかお願いいたします。 XMLを吐き出すphpは↓の通りで、 $dom = new DOMDocument('1.0', 'UTF-8'); …いろいろ中身をdomの要素を追加していく。… print $dom->saveXML(); ちなみに、吐き出されるXMLは↓の通りです。 <?xml version="1.0" encoding="UTF-8"?> <root> <ctg_info> <ctg_cd>1</ctg_cd> <ctg_name>設計</ctg_name> <naiyo_info> <naiyo_cd>1</naiyo_cd> <naiyo_name>仕様打合せ</naiyo_name> </naiyo_info> </ctg_info> </root> ちなみに、phpの $dom = new DOMDocument('1.0', 'UTF-8'); を $dom = new DOMDocument('1.0', 'EUC-JP'); と変更すると、↓のワーニングが出てしまいます。 Warning: DOMDocument::saveXML() [domdocument.savexml]: output conversion failed due to conv error, bytes 0xC0 0xDF 0xB7 0xD7 どうか、お願いいたします。

  • XML
  • 回答数2
  • ありがとう数47

質問者が選んだベストアンサー

  • ベストアンサー
  • yyr446
  • ベストアンサー率65% (870/1330)
回答No.2

PHPのDOMDocumentの処理は、UTF-8でないとうまくいかない場合が多々あります。 mb_internal_encoding("UTF-8"); mb_http_output("UTF-8"); mb_language("ja"); も明示的にセットしましょう。

idaira
質問者

お礼

ありがとうございます。 明示してみましたが、駄目でした。

その他の回答 (1)

  • yyr446
  • ベストアンサー率65% (870/1330)
回答No.1

PHPプログラムの先頭(まだ何も出力する前に) header('Content-Type: text/xml'); を入れてみる。 あるいは header('Content-Type: application/xml'); も試してみて。

idaira
質問者

お礼

ありがとうございます。 実は、FireFoxでも表示ができなかったのですが、 yyr446さんの指示通りおこなったら、FireFoxでは表示できるように なりました!!感謝です。 。。しかし、IE7ではいまだ表示できません。 答えに近づけたと思うのですが、さらに、情報ありましたらどうかお願いいたします。

関連するQ&A

  • xmlファイルが生成されない

    <?php //DomDocumentを呼び出す $dom = new DomDocument('1.0','UTF-8'); //要素ノード[document]を追加 $document = $dom->appendChild($dom->createElement('document')); //新しい要素をdocumentの子要素として挿入する $document->appendChild($dom->createElement('name','名前です')); $document->appendChild($dom->createElement('text','テキストです。')); //字下げや空白を考慮してきれいに整形した出力を行う $dom->formatOutput = true; //同階層にtest.xmlとして保存 $dom->save('test.xml'); //出力 echo $dom->saveXML(); ?> のように、同じディレクトリ内にXMLファイルを生成するphpプログラムを作成してみたのですが、 ブラウザからこのPHPファイルにアクセスしてもXMLファイルが作られません。どうすれば良いのでしょうか。 なにかphp,apache等の設定をしてないからでしょうか。 よろしくお願いします。

    • 締切済み
    • PHP
  • 二つの XML 文書を結合する方法は?

    DOM で XML 文書を結合する例を探していたら、下記のものが見つかりました。 http://www.atmarkit.co.jp/fxml/askxmlexpert/020merge/merge_sample.html これを参考に、PHP5 でテストするために、下記のスクリプトを作成しました。 <?php $r1 = new DomDocument; $r1->loadXML("<Items><Item>a</Item></Items>"); $r1rt = $r1->documentElement; $r2 = new DomDocument; $r2->loadXML("<Item>b</Item>"); $r2rt = $r2->documentElement; $r1rt->insertBefore($r2rt,null); $r1->encoding = "utf-8"; print $r1->saveXML(); ?> このスクリプトを実行すると、insertBefore のところで例外が発生しエラーになってしまいます。何が悪いのでしょうか? 最終的にやりたいのは XML 文書を結合するということなので、DOM にはこだわりません。何か良い方法があれば、お知恵をお貸し下さい。

    • 締切済み
    • XML
  • XMLでこんなの作りたい。

    [ 環境 ] OS:WindowsXP Pro PHP:5.3.1 Apache:2.2.14 DBServer:SQLServer2005 EXPRESS [ 質問 ] DB側データ row,level,level_name 0,level1,root 1,level2,admin という様なデータをXMLにて以下の様な表示にしたい。 <?xml version="1.0" encoding="UTF-8" ?> <result> <row row="0"> <level>level1</level> <level_name>root</level_name> </row> <row row="1"> <level>level2</level> <level_name>admin</level_name> </row> </result> この場合、以下のソースをどの様に変更したら良いか アドバイスを頂けたらと思います。 <?php // SQLServerとの接続 require("connect-sqlserver.php"); // XML 生成 $dom = new DOMDocument("1.0"); $node = $dom->createElement("result"); $parnode = $dom->appendChild($node); // MSSQLSERVR への接続セット $db = mssql_connect($server, $userid, $passwd); mssql_select_db($dbName, $db); // [SYSW_LEVEL]テーブルからフィールド情報取得 $query = "SELECT * FROM SYSW_LEVEL"; $res = mssql_query($query, $db); header("Content-type: text/xml"); // XMLへフィールドの値を渡す while ($row = mssql_fetch_assoc($res)) { $node = $dom->createElement("row"); $newnode = $parnode->appendChild($node); $newnode->setAttribute("level", $row['LVL_LEVEL']); $newnode->setAttribute("level_name", mb_convert_encoding($row['LVL_LEVELNAME'],'UTF-8','CP932')); } $dom->encoding="UTF-8"; echo $dom->saveXML(); ?> 以上、よろしくお願い致します。

    • 締切済み
    • PHP
  • domでのXML作成について

    PHP4.2のdomを使い、下記のようなXMLを作成したいです。 しかし、Itemのノードに対して、NUMBERとNAMEという子ノードを2つつけるやり方が分からず困っています。 PHPは書いて見たのですが、上手くいっていません。 教えていただけると助かります。 宜しくお願いします。 【作成したいXML】 <Response> <Items> <Item> <NUMBER>47</NUMBER> <NAME>沖縄県</NAME> </Item> </Items> </Response> 【PHP】 $dom = domxml_new_doc("1.0"); $Response = $dom->create_element("Response"); $root = $dom->append_child($Response); $Items = $dom->create_element("Items"); $Item = $dom->create_element("Item"); $NUMBER = $dom->create_element("NAME"); $text1 = $dom->create_text_node("47"); $NUMBER->append_child($text1); $NAME = $dom->create_element("NAME"); $text2 = $dom->create_text_node("沖縄"); $NAME->append_child($text2); $Item->append_child($NAME); $Items->append_child($Item); $root->append_child($Items);

    • ベストアンサー
    • PHP
  • フォームからPOSTされた値をXMLへ書き込むプログラムなのですが、「

    フォームからPOSTされた値をXMLへ書き込むプログラムなのですが、「あ」を入力するとなにも書き込まれません。 「あ」以外は正常に書き込めるようです。 1日調べてみたのですが、どうしてもわかりません。 教えていただけないでしょうか。 情報が足りないようでしたら出させていただきますのでどうかよろしくお願いします。 $dom = new DomDocument('1.0','utf-8'); $dom->load($FilePath); $data = $dom->documentElement->parentNode->firstChild->appendChild($dom->createElement('data')); $testnode = $data->appendChild($dom->createElement('test')); $testtxt = mb_convert_encoding($_POST['test'],'utf-8','sjis'); $testnode->appendChild($dom->createTextNode($testtxt)); 環境 Windows2008サーバ php5.3.2 IIS7.0

    • ベストアンサー
    • PHP
  • XMLの相対パスの書き方

    <?xml version="1.0" encoding="UTF-8" standalone="no"?> <root> <info> <element> <item>Pwd</item> <value>00000000000000</value> </element> <element> <item>Name</item> <value>MyPC</value> </element> </info> </root> こういうXMLファイルの記述があり、itemがNameであるvalueを取りたいといった場合、どういうパスを記述すればよいでしょうか? VBで動くようにしたいです。 よろしくお願いします。

    • ベストアンサー
    • XML
  • XMLへDOMでタグの追加

    次のようなXMLにDOMで、タグを追加しようとしているのですが、 追加される場所が思った所に追加されません。 正常XMLにようにしたいのですが、どうすれば良いでしょうか? --元XML----------------- <root> <item>a</item> <item>b</item> </root> --結果XML----------------- <root> <item>a</item> <item>b</item> <info>xxxx</info> </root> --正常XML----------------- <root> <info>xxxx</info> <item>a</item> <item>b</item> </root> -- プログラム ---------------- MSXML::IXMLDOMDocumentPtr xmlDoc = NULL; MSXML::IXMLDOMNodeListPtr pNodes; MSXML::IXMLDOMNodePtr pNode; MSXML::IXMLDOMElementPtr pElem; xmlDoc.CreateInstance ("Msxml2.DOMDocument"); xmlDoc->load( ファイル名 ); pNodes = xmlDoc->selectNodes(L"/root"); pNode = pNodes->Getitem(0); pElem = xmlDoc->createElement(L"info"); pNode->appendChild( pElem ); 環境:WinXP+IE7+VC6

    • ベストアンサー
    • XML
  • PHPでXMLを表示させたときの外部エンティティの挙動に関して

    XML+XSLでHTMLを生成する上で、PHPを経由する場合と、しない場合で、 外部エンティティの挙動が異なっていて悩んでいます。 具体的には、  ・XML+XSL+外部エンティティ → 意図通りHTML生成  ・PHP+XML+XSL+外部エンティティ → 意図通りHTML生成されない(外部エンティティが生成されない) こういうものなのでしょうか? もし、こういう仕様であれば、なにか対応策はあるのでしょうか? ソースと生成されたHTMLは下記の通りです。 【Though.php】 <?php header( 'Content-Type: text/html; charset=UTF-8' ); $xml = new DomDocument(); $xml->load( 'MainData.xml' ); $xsl = new DomDocument(); $xsl->load('Main.xsl'); $processor = new xsltprocessor(); $processor->importStyleSheet($xsl); echo $processor->transformToXML($xml); ?> 【MainData.xml】 <?xml version="1.0" encoding="utf-8"?> <?xml-stylesheet type="text/xsl" href="Main.xsl" ?> <!DOCTYPE books [ <!ENTITY sub_data SYSTEM "SubData.xml"> ]> <root> <node1>TEST1</node1> <node2>&sub_data;</node2> </root> 【Main.xsl】 <?xml version = "1.0" ?> <xsl:stylesheet xmlns:xsl="http://www.w3.org/1999/XSL/Transform" version="1.0"> <xsl:template match="/"> <html> <xsl:apply-templates /> </html> </xsl:template> <xsl:template match="@*|node()"> <xsl:copy> <xsl:apply-templates /> </xsl:copy> </xsl:template> </xsl:stylesheet> 【SubData.xml】 <?xml version="1.0" encoding="utf-8"?> <sub_data>Test2</sub_data> 【XML+XSL+外部エンティティで生成されるHTML(ブラウザで直接MainData.xmlを開いた場合)】 <html><?xml-stylesheet type="text/xsl" href="Main.xsl" ><root><node1>TEST1</node1><node2><sub_data>Test2</sub_data></node2></root></html> 【PHP+XML+XSL+外部エンティティで生成されるHTML(ブラウザでThrough.phpを開いた場合)】 <html> <?xml-stylesheet type="text/xsl" href="Main.xsl" ><root> <node1>TEST1</node1> <node2></node2>    //←node2の中がカラッポになっている。。。 </root> </html> ※生成されたHTMLは、IE8の開発者ツールで確認しています。 XMLやPHPは最近やり始めたのでトンチンカンなことを言ってるかもしれませんが、よろしくお願いします。

    • ベストアンサー
    • PHP
  • XML DOM XMLパーサーについて理解していません

    XMLについてイマイチ理解していないので教えてください。PHPでXMLファイルを開いて何らかの処理をするとします。例えば <?php //ドキュメントオブジェクトの作成 $doc = new DOMDocument(); //XML 文書ファイルのパース(DOM ツリーの作成) $doc->load("docs/td101.xml") //要素"b"を取得する $bElement = $doc->getElementsByTagName("b")->item(0); //取得した要素"b"に属性"ad"を設定する $bElement->setAttribute("ad","Fukuoka"); //ドキュメントをシリアライズする $doc->save("docs/result101.xml"); ?> のようにXMLファイルに属性を追加するという処理を行うとします。この時、DOMはPHPによって生成されるんでしょうか?またXMLはXMLパーサーによって解析されると本で読んだのですが、この場合PHPがXMLパーサーの機能を持っているんでしょうか?それともブラウザにXMLパーサーの機能があり、ブラウザ側で処理をされているのでしょうか?意味がわからなくて申し訳ないですが、この辺りを理解していなくて・・・御願いいたします。

    • ベストアンサー
    • XML
  • phpでxmlが動かない macOsXLion

    phpでxmlの練習をしてるんですが全く動作しません。なんででしょうか? コードを次に書きます。 <?php $doc = new DOMDocument; // DOMDocumentのインスタンス生成 $root = $doc->createElement("cars");  // root要素を作成する $doc->appendChild($root); // docの子としてrootを追加する $elm1 = $doc->createElement("car"); // car要素を作成する $root->appendChild($elm1); // car要素をrootの子として追加する $txt1 = $doc->createTextNode("スポーツカー"); // テキストノードを作成する $elm1->appendChild($txt1); // テキストノードをテキスト要素としてelm1の子として追加する $elm2 = $doc->createElement("car"); // car要素を作成する $root->appendChild($elm2); // rootの子としてcar要素を追加する $txt2 = $doc->createTextNode("トラック"); // テキストノードを作成する $elm2->appendChild(txt2); // elm2にtxt2を追加する print $doc->saveXML(); ?> よろしくお願いします。

    • ベストアンサー
    • PHP

専門家に質問してみよう