
index.phpでPC用と携帯用のテンプレートへ振り分けています。(Smarty使用)
携帯でスタイルシートを使う為に、index.phpの先頭で
header("Content-type: application/xhtml+xml");を設定すると
PC側ではXMLパースエラーが生じます。
エラー内容「XML パースエラー: 定義されていない実体が使用されています。」
回避するために色々やってみました。
1、&やなどを使わない
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.dt …
<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の補足では解決しないような内容だと思うので、念のため。
この回答への補足
おっしゃる通りです。混在してしまってますね。
サイトの構築は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はたまに確認する程度です。
何度もすみません。
何度もお付き合いいただきありがとうございました。
結局、PCと携帯のフォルダを分けて作っていますが、
基本的なことをちゃんと調べるきっかけとなりましたので
感謝致します。
No.3
- 回答日時:
IEだと
header("Content-type: application/xhtml+xml");
は対応してませんよ。
と補足。
No.2
- 回答日時:
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は使ったことがない
この回答への補足
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が見つからない時は、教えて!gooで質問しましょう!
関連するカテゴリからQ&Aを探す
おすすめ情報
デイリーランキングこのカテゴリの人気デイリーQ&Aランキング
-
文字化けについて
-
PHPのif文でその処理を途中で抜...
-
Subversionのリポジトリの削除
-
FORMで送信ボタンと戻るボタン...
-
PHPの変数をHTMLで使いたい
-
webroot以外の画像の表示
-
PHPがうまく表示されない・・・?
-
「クラウドにアップロード」」...
-
POSTした値を、別ページにもPOS...
-
.phpファイルが、表示されない
-
'_'(アンダースコア)の使い方...
-
ファイルの遷移がうまく行われ...
-
セッションについての設定なの...
-
phpでうまく画像がダウンロード...
-
C言語でのディレクトリ作成につ...
-
htmlで自分自身を呼び出して整...
-
コマンドプロンプトを指定のデ...
-
パースエラーとは?
-
PHPで複数ファイルのダウン...
-
CSV出力にHTMLが入ってしまう
マンスリーランキングこのカテゴリの人気マンスリーQ&Aランキング
-
文字化けについて
-
日付と年月日を選択するコード...
-
phpの画面表示が真っ白です
-
PHPでHTLM入力された背...
-
一つのphpファイルでframeset
-
phpの質問です
-
ライブドアブログにPHPスクリプ...
-
PHP→JavaScriptへの書き換え
-
phpでテキストファイルへ書き込み
-
外部PHPファイルの読込みについて
-
PHPをはじめて1日目なので・・・
-
更新pingの送信について
-
header関数について
-
mb_convert_variablesで変換出...
-
Wordpressを利用したソート機能...
-
連番を書き出すなどの単純処理...
-
ローカル環境で動くのに本番環...
-
文字列の一部を取り出したいの...
-
POSTされた値をEUCで表示したい
-
ここでの ②if($su_d<>"")の比較...
おすすめ情報