• ベストアンサー

XMLパースエラー回避方法

index.phpでPC用と携帯用のテンプレートへ振り分けています。(Smarty使用) 携帯でスタイルシートを使う為に、index.phpの先頭で header("Content-type: application/xhtml+xml");を設定すると PC側ではXMLパースエラーが生じます。 エラー内容「XML パースエラー: 定義されていない実体が使用されています。」 回避するために色々やってみました。 1、&amp;や&nbsp;などを使わない 2、PCの時は再度header("Content-type: text/html");を設定 3、DOCTYPEのstrictをTransitionalに変更 この状態だとエラーは出ませんが、1の方法はエンコード処理できなくなりますので無理です。 2、3の方法は問題がないのでしょうか。 できればindex.php一つのファイルでどうにか処理したいのですが、 何かほかにありましたら、ご教授ください。 念のため2の方法でのコードを記述しておきます。 pc.tpl <!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 strict//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd"> <html xmlns="http://www.w3.org/1999/xhtml" xml:lang="ja"> <head> <meta http-equiv="Content-Type" content="application/xhtml+xml; charset=utf-8" /> <meta http-equiv="content-style-type" content="text/css" /> <title>{$title}</title> </head> index.php header("Content-type: application/xhtml+xml"); require_once( 'getUserAgent.php' ); require_once( 'Smarty_Common.php' ); // Smartyオブジェクト取得 $smarty =& getMySmarty(); // エージェント取得 $carrier = get_carrier(); if($carrier != 'pc') { $setXML = '<?xml version="1.0" encoding="Shift-JIS"?>'; $smarty->assign( 'setXML', $setXML ); }else{ header("Content-type: text/html"); } <省略> php5 windows

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

  • ベストアンサー
回答No.4

気づいた事:、 結局出力されるXHTMLはUTF-8なの?Shift_JISなの? XML宣言でShift_JISって書いているのにmeta要素側ではUTF-8になっている… あと、 >PC側では 検証したブラウザを全て挙げてくれ。 #普通なら#1の補足では解決しないような内容だと思うので、念のため。

aya_bambi
質問者

お礼

何度もお付き合いいただきありがとうございました。 結局、PCと携帯のフォルダを分けて作っていますが、 基本的なことをちゃんと調べるきっかけとなりましたので 感謝致します。

aya_bambi
質問者

補足

おっしゃる通りです。混在してしまってますね。 サイトの構築はUTF-8です。 smartyはshift_jisに対応していないので携帯に出力する際mb_convert_encoding($value, "SJIS-WIN", "UTF8");と エンコードしてます。 XML宣言はUTF-8にすると携帯の方で文字化けするので、 Shift_JISにしてみたところうまくいったのでそのまま・・・。 meta要素がutf-8の場合は、XML宣言もutf-8が妥当なのでしょうか。 自分にはまだ高度だと感じたので、PC用と携帯用を 完全に切り離した方が良いのかなと思い始めています。 検証ブラウザはFirefox、IE、docomoシュミレータ2(xhtml対応) auシュミレータWAP2.0対応、docomo実機 IEとauはたまに確認する程度です。 何度もすみません。

全文を見る
すると、全ての回答が全文表示されます。

その他の回答 (3)

  • tany180sx
  • ベストアンサー率63% (239/379)
回答No.3

IEだと header("Content-type: application/xhtml+xml"); は対応してませんよ。 と補足。

aya_bambi
質問者

お礼

教えてくださり助かりました。 ありがとうございます。

aya_bambi
質問者

補足

メインFirefoxでやっているので気がつきませんでした。

全文を見る
すると、全ての回答が全文表示されます。
回答No.2

追記: ○ Shift_JIS × Shift-JIS http://www.iana.org/assignments/character-sets #これは直接の原因ではない

全文を見る
すると、全ての回答が全文表示されます。
回答No.1

大抵の場合出力しているXMLが間違っています。クライアント側に提供されているソースを目視して確認してみてください。 この手のトラブルは特に 誤 <a href="http://www.google.com/?hl=en&q=hoge">Google英語版でhogeを検索</a> 正 <a href="http://www.google.com/?hl=en&q=hoge">Google英語版でhogeを検索</a> のケースで発生するような気がします HTML 4.01においては http://www.w3.org/TR/html401/appendix/notes.html >If it encounters an undeclared entity, the entity should be treated as character data. と、ミスに対してゆるい対応をするよう求めています。 XHTMLにはおそらくこれはない。XMLとして厳格であることに意味があると思うので。 #Smartyは使ったことがない

aya_bambi
質問者

補足

index.phpのheader("Content-type: text/html");を削除して、 PC用テンプレートの <meta http-equiv="Content-Type" content="application/xhtml+xml; charset=utf-8" />を <meta http-equiv="Content-Type" content="text/html; charset=utf-8" /> にしたところ、PC、携帯の両方でエラーがなくなりました。 これが正解なのかわかりませんので、もう少し調べてみます。 お礼はまた後ほど書かせて頂きます。

全文を見る
すると、全ての回答が全文表示されます。

関連するQ&A

  • phpファイルにxhtmlを適用する方法

    phpファイルにxhtmlを適用する方法 phpファイル(index.php)でモバイルサイトを作成したのですがドコモで背景色や文字サイズなどが反映されません。 【phpファイル(index.php)】 <?php echo '<?xml version="1.0" encoding="UTF-8"?>'."\n" ?><!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd"> <html xmlns="http://www.w3.org/1999/xhtml" lang="ja" xml:lang="ja"> <head> <meta http-equiv="content-type" content="application/xhtml+xml; charset=UTF-8" /> <?php header("Content-type: application/xhtml+xml;charset=utf-8"); ?> 【.htaccess】 AddType application/xhtml+xml .php とそれぞれ記述しているのですが当方の携帯sh906iでは反映されません。 どこが悪いのでしょうか・・・ HP製作会社に依頼して作ってもらったのですが、反映されない事を伝えるとその後音信不通になっていて どうにかこの辺りの知識まで来たのですがどこが悪いのか分かりません。 HP製作会社からいつか連絡が来るんでしょうがやりとりをしている感じではあまり知識が無いようで 現在も答えないのではなく答えられないんだと思います。。。。 どうかお力をお貸し下さい。

  • 基本的なことですがXML宣言について教えてください。

    XHTMLでホームページを作成しようと、 <?xml version="1.0" encoding="Shift_JIS"?> <!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd"> <html xmlns="http://www.w3.org/1999/xhtml" xml:lang="ja" lang="ja"> <head> <meta http-equiv="Content-Type" content="text/html; charset=Shift_JIS" /> <meta http-equiv="Content-Script-Type" content="text/javascript" /> <meta http-equiv="Content-Style-Type" content="text/css" /> から書き始めているのですが、画面上では文字化けしないものの、メールフォームなどに受け渡しをするとどうしても文字化けがおこり、直りません。 ホームページのトップページにフォームを設置して、そこまで普通に文字化けもせずに表示されますが、確認ボタンを押すと画面全てが文字化けします。 CGIを考慮してShift-Jisで作成をしていますが、どうしてでしょうか? 他に宣言される場所とかあるのでしょうか? 何かいいアドバイスがあればご教授下さい。 宜しくお願いします。

    • 締切済み
    • XML
  • phpのダウンロード画面が出てしまう

    IE6からphpにアクセスするとダウンロード画面が出てきてしまいます。 ダウンロード画面を出さないようにするにはどうすればいいでしょうか。httpd.confは編集できない環境です。 .htaccessは下記のどちらにしてもDL画面が出てきます。 AddType application/x-httpd-php .xhtml AddType application/xhtml+xml .php index.php; <?php header("Content-Type: application/xhtml+xml"); echo "<?xml version=\"1.0\" encoding=\"Shift_JIS\"?>"; ?> <!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd"> <html xmlns="http://www.w3.org/1999/xhtml" xml:lang="ja" > <head> <meta http-equiv="ContentType" content="application/xhtml+xml" /> <meta content="i-mode7_FOMA" /> <title>タイトル</title> </head> <body> <?php readfile("./numbers3/n3temp.txt"); ?> </body> </html>

    • ベストアンサー
    • CSS
  • PHPを動作させたいのと・・・ダウンロード回避

    携帯向けのサイトを作成しているのですが、サーバーの設定と構文でいろいろつまずいています。 かなり検索して調べてみたのですが、なかなか肝心な所が見つかりません。 また、設定をしても、「出来ていたのが出来なく」なったりと壁にブチ当たり質問に来ました。 サーバー環境 さくらインターネット(レンタルサーバー) PHP バージョン4.4.8(変更の予定はありません) 状況 PHPでホームページを作成していますが、拡張子を.phpのまま作成しており.htmlでもPHPが動作させたいのですが、設定がうまく出来ずに.phpのままやる事にしました。 作成して行くうちにxml形式で作成した方がいい事がわかり.xhtmlでPHPを動作させようと思いました。 しかし、.htaccessと宣言等は簡単に出来てxmlで記述&動作する事を確認しました。 そこで、最初の問題と同じく.xhtmlでPHPが動作させようとしましたが、これが全くうまく行きませんでした。 作業が進まないので、PHP自体でxml宣言してみたらうまく行っているようです。 .htaccessの内容 AddType text/html .php .html .htm .xhtml AddType application/x-httpd-php .htm .html .xhtml AddType application/xhtml+xml .php sample.phpの内容(http://www.samle.ne.jp/sample.php) <? header('Content-Type: application/xhtml+xml'); echo '<?xml version="1.0" encoding="Shift_JIS"?>'."\n"; require_once( "ick/cons.inc" ); require_once( "ick/db.inc" ); require_once( "ick/bas.inc" ); require_once( "ick/prokeitai.inc" ); $db = new CDatabase( DBNAME ); $tbl = new CRecordset; switch($g_info["carrier"]) { case "Do": ?> <!DOCTYPE html PUBLIC "-//i-mode group (ja)//DTD XHTML i-XHTML(Locale/Ver.=ja/2.3) 1.0//EN" "i-xhtml_4ja_10.dtd"> <? break; case "au": ?> <!DOCTYPE html PUBLIC "-//OPENWAVE//DTD XHTML 1.0//EN" "http://www.openwave.com/DTD/xhtml-basic.dtd"> <? break; case "So": //まだdocは設定していない ?> <!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd"> <? break; default: ?> <!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd"> <? } ?> 以下省略(してもよかったかな) 【問題発生】 この状態だと各キャリアで見た時はまったく問題無いのですが、パソコンのブラウザで見ると問題が発生しました。 URLにhttp://www.samle.ne.jp/sample.phpを入れて実行すると【ダウンロードしますか】となってしまいます。 (一部のブラウザFirefoxでは正常に動作しました。) 同じくhttp://www.samle.ne.jp/、http://www.samle.ne.jp/index.html、http://www.samle.ne.jp/index.htmと入れても【ダウンロードしますか】となります。 .htaccessの設定だと思うのですが、知識が浅いので検索した先でみたものを理解するにも難しくここに来ました。 どのような設定にすればうまく出来るか良きアドバイスお願いします。 【希望】 (1)拡張子.xhtmlでPHPを動作させたい (2)(1)にしなくてもいいので、パソコンのブラウザで【問題発生】の症状を回避したい ホームページとして認識して欲しいもの .html .xhtml .htm .php PHPが機能して欲しい拡張子 .html .xhtml .htm .php よろしくお願いします。

    • 締切済み
    • XML
  • i-modeでxhtmlをみるには、、

    Perlからxhtmlをはきだして、i-modeで見れるようにしたいのですが、 表示がうまくいきません。 ヘッダーは Content-type: text/html; charset=Shift_JIS <?xml version="1.0" encoding="Shift_JIS"?> <!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-Transitional.dtd"> <html xmlns="http://www.w3.org/1999/xhtml" xml:lang="ja" lang="ja"> <head> <meta http-equiv="Content-Type" content="text/html; charset=Shift_JIS"> こんな感じです。 「Content-type: text/html; charset=Shift_JIS」の部分を 「Content-Type: application/xhtml+xml」や 「Content-Type: application/xhtml」等でやっても表示されませんでした。 もし分かる方がいましたら教えてください。 宜しくお願いします。

    • 締切済み
    • XML
  • <title>~<title>部分にPHP読み込み

    <!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd"> <html xmlns="http://www.w3.org/1999/xhtml" lang="ja" xml:lang="ja"> <head> <meta http-equiv="Content-Type" content="text/html; charset=EUC-JP" /> <meta name="keywords" content="" /> <meta name="description" content="" /> <title>●●●●●●</title> <meta http-equiv="content-script-type" content="text/javascript" /> </head> <body> ~ 上記<title>●●●●●●</title>部分の、●●●●●●にtitle.phpの内容を挿入したく、 <?php require("title.php"); ?> と記述したのですが、エラーが出てしまいます。 title.php単体では正常に文字が表示されます。 どのように記述したら良いか、どなたかご教授いただけないでしょうか。 宜しくお願い致します。

    • ベストアンサー
    • PHP
  • 携帯サイトでphpを使いdocomo宣言をすると、PCで上手く表示されない

    現在、携帯サイトを作っているのですが、下記のような書き方だとdocomoではCSSもきいて上手く表示されるのですが、I Eで表示させようとするとダウンロード画面が出てきます。 PC、携帯、共に同じ表示にさせたいのですが、どうすればいいでしょうか。 ご教授お願いします。 <?php header("Content-type: application/xhtml+xml;charset=Shift_JIS"); ?> <!DOCTYPE html PUBLIC "-//i-mode group (ja)//DTD XHTML i-XHTML(Locale/Ver.=ja/1.1) 1.0//EN" "i-xhtml_4ja_10.dtd"> <html xmlns="http://www.w3.org/1999/xhtml"> <head> <meta http-equiv="Content-Type" content="text/html; charset=shift_JIS" />

    • ベストアンサー
    • PHP
  • 次のPHP BASIC認証画面で

    My Realmですよ が文字化けするのですがどうすればいいのでしょうか? このphpをFC4ーPCに配置してWindowsMeーPCのブラウザでこのphpを表示させています <?php echo' <?xml version="1.0" encoding="utf-8"?> <!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.1//EN" "http://www.w3.org/TR/xhtml11/DTD/xhtml11.dtd"> <html xmlns="http://www.w3.org/1999/xhtml" xml:lang="ja"> <head> <meta http-equiv="content-type" content="application/xhtml+xml; charset=utf-8"/> <meta http-equiv="content-style-type" content="text/css"/> <title>goo</title> </head> <body> '; if (!isset($_SERVER['PHP_AUTH_USER'])) { header('WWW-Authenticate:Basic realm="My Realmですよ"'); header('HTTP/1.0 401 Unauthorized'); echo "ユーザーがキャンセルボタンを押した時に送信されるテキスト\n"; exit; } else { echo "<p>こんにちは、{$_SERVER['PHP_AUTH_USER']} さん。</p>"; echo "<p>あなたは、{$_SERVER['PHP_AUTH_PW']} をパスワードとして入力しました。</p>"; } echo' </body> </html> '; ?>

    • 締切済み
    • PHP
  • 「ページでエラーが発生しました」というエラー

    movabletype3.3を利用しております 最近ページエラーが発生します エラーの詳細は ライン:2 文字:8 エラー:'​www'​は宣言されていません コード:0 という物です このブログのメインページテンプレートの上部には 以下のような記述があります <?xml version="1.0" encoding="UTF-8"?> <!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "​http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">​ <html xmlns="​http://www.w3.org/1999/xhtml"​ id="sixapart-standard"> <head> <meta http-equiv="Content-Script-Type" content="text/javascript" /> <meta http-equiv="Content-Type" content="text/html; charset=<$MTPublishCharset$>" /> <meta http-equiv="Content-Style-Type" content="text/css" /> どうすればこのエラーを解除できるのでしょうか? よろしくお願いします

  • xmlの宣言?ドコモで反転表示がうまくいかない。

    質問の内容がレス違いの場合はご了承ください。 PHPを使用して携帯向けのサイトを作成していますが、ドコモの文字反転がうまく行かなくて困っています。 説明が複雑になりますが、xmlの宣言でつまずいているのか.htaccessの設定とサーバーの設定がうまくいって無いのかほからないので、現状を書きますので、わかるようでしたらアドバイスしてください。 使用サーバー さくらのレンタルサーバー PHPのバージョン PHP 4.4.8(変更の予定はありません) 状況 .htaccessの内容 AddType application/xhtml+xml .xhtml 実行ソースabc.xthmlの内容 <?xml version="1.0" encoding="Shift_JIS"?> <!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd"> <html xmlns="http://www.w3.org/1999/xhtml" lang="ja" xml:lang="ja"> <head> <meta http-equiv="Content-Type" content="application/xhtml+xml; charset=Shift_JIS" /> <title>テスト表示</title> </head> <body> <div style="background-color:#ff0000;">テスト表示</div> </body> </html> ------------------------------------------------------------- この状態でドコモ端末よりアクセスすると反転表示されます。 これではPHPが使えないので、xhtmlでPHPを使えるようにしてみました。 参考にしたサイト http://help.sakura.ne.jp/forumup/c/2006/09/60.html http://faq.sakuratan.com/wiki/wiki.cgi?cgi%25a4%25c8php#i23 .htaccess変更後の内容 AddType application/xhtml+xml .xhtml DirectoryIndex index.html index.php .ht Action myphp-script /inc/php.cgi AddHandler myphp-script .php .html .xhtml 実行ソースabc.xthml変更後の内容 <? echo '<?xml version="1.0" encoding="Shift_JIS"?>'."\n" ?> <!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd"> <html xmlns="http://www.w3.org/1999/xhtml" lang="ja" xml:lang="ja"> <head> <meta http-equiv="Content-Type" content="application/xhtml+xml; charset=Shift_JIS" /> <title>テスト表示</title> </head> <body> <? echo "これで表示されれはOK"."<br>"; ?> <div style="background-color:#ff0000;">テスト表示</div> </body> </html> ------------------------------------------------------------- PHPは動作しているのですが、反転されないようになりました。 IE等でソース確認してみましたが、ソースにはxmlの宣言文は書かれています。 ですが、ドコモ端末で反転されないのです。 表示されていたのが表示されなくなったので、その間にやった処理を見直したのですが、xhtml上でPHPを動作させたいので、その方法がわかりません。 ちょっと説明がヘタで申し訳ないのですが、良きアドバイスお願いします。

    • ベストアンサー
    • PHP