2008年03月11日

XHTML1.0へ書き直す際の問題発生と解決

最近はほんとXHTMLが多くなってきましたよね。

そろそろ自分の手がけているサイトもと思い、幾日かかけて管理しているウェブサイトのひとつをHTML4からXHTMLへ書き直しました。

終了タグがないタグの修正や大文字小文字関連は対した作業ではなく、一番ボリュームのある作業はやはりテーブルを極力なくすことと、装飾関係を完全に外部CSSファイル化することでした。

これをすることによる【体感できる】メリットは

・htmlファイルの容量が小さくなる
・ページの表示速度が速い
・レイアウト修正時、CSSの1箇所を変更するだけでXHTML内の修正箇所を一括変更できる
・検索エンジンに内容を拾ってもらいやすくなる(若干でもSEO的に有利になる)

こんなところでしょうか。

まあ実際には他にも色々あるんでしょうが私が体感できる部分はこんなところです。

デメリットについては
・ソースが厳格
・CSSを外部ファイルにすることにより管理ファイルが増える

ぶっちゃけたいしたデメリットじゃないですね(笑)

実はあと二つ、ある環境限定のデメリット、というか問題が発生することが判明しました。




PHPを使用可能にしているサーバで、かつ、拡張子がhtmlのファイルもPHPスクリプトと同じようにスクリプトを挿入できるようにしている環境です。
これはPHPが使用可能なサーバであれば、.htaccessなどでそのような環境を簡単に作れます。

上記の環境ですと、XHTML冒頭に宣言する

<?xml version="1.0" encoding="UTF-8"?>

をそのまま書くとPHPエラーになります。

<? ← これがPHPの開始タグ(簡略形)なので、その後に続く xml version〜 がPHPのスクリプトエラーになるんです。

じゃあどうしようかと思い、

echo "<?xml version=\"1.0\" encoding=\"UTF-8\"?>\r\n";



echo '<?xml version="1.0" encoding="UTF-8"?>'."\r\n";

という形でPHPが出力する文字列として記述してみましたがこれでも駄目でした。

どうしても <? をPHPの開始タグとして認識してしまうようです。

色々と文献を調べていたら、簡略形の開始タグの使用を制限してしまえばよい事がわかりました。
具体的には、.htaccessに

php_flag short_open_tag Off

と書くことで簡略形の開始タグは使えなくなります。

上記設定の上でxml宣言をechoすることでやっとこさxml宣言ができました^^;


ここでまた問題が・・・(泣)

IE6のバグで、
「XHTMLの <!DOCTYPE 宣言よりも前に文字や空白があると、古いブラウザ用の表示モード(後方互換モード)になってしまう」
のだそうです。
この後方互換モードはCSSのmarginやpaddingの解釈が標準準拠モード(仕様に準拠した厳格な表示モード)と全然違うんです。
ですのでレイアウトが崩れまくります。。

IE6はまだまだ市場ではかなりの部分を占めているので、じゃあXML宣言はいらないかなぁと弱気になったんですが、それでもせっかくここまでXHTML化をしてきたのだからなんとかしようと思い、PHPで解決させる事にしました。

PHPでユーザエージェントを取得して判断させるというものです。
ユーザエージェントを偽装されたらなーんも意味ないんですけどね(笑)
ソースは以下の通りです。

DOCTYPEの直前に



<?php
$ua = $_SERVER["HTTP_USER_AGENT"];
if(!(ereg("Windows",$ua) && ereg("MSIE",$ua)) || ereg("MSIE 7",$ua))
{
echo '<?xml version="1.0" encoding="UTF-8"?>'."\r\n";
}
?>



と書きます。

条件としては

・IE6以下のユーザエージェントでない場合
または
・IE7のユーザエージェントの場合

つまり
【IE6以下のIEか、IEではない場合】

であればXML宣言する

という感じです。

これでIE6以下のブラウザ以外はきちんとXML宣言もされます。


XHTML化は、思わぬ所で意外な問題が発生しましたが何とか解決できました。

HTMLからXHTMLへの移行を考えていてPHPも併用している方の参考になればと思います。

何かしら参考になりましたらクリックをよろしくお願いします
にほんブログ村 IT技術ブログへ   人気ブログランキング    
タグ:xml SEO CSS HTML
この記事へのコメント
プログラマ・エンジニア特化型の事業支援プロジェクト
『スプリング・テック・キャンプ2008』(STC2008)の運営開始!



突然のメッセージにて失礼致します。
初めまして、ALITO株式会社と申します。開発者・技術者の方々向けの情報の1つとしてご覧頂けましたら幸いです。


国内外企業のインキュベーション事業を展開する弊社は、開発者及び、技術者に焦点を当てた起業家支援プロジェクト『スプリング・テック・キャンプ2008』(以下、STC2008)を開始しました。このプロジェクトは、開発者及び、技術者がこれまで培った技術を活用し、自分が作りたいサービスを思う存分2ヶ月間で開発して頂くために、当社が最大限に支援するプロジェクトとなります。


【STC2008の詳細ウェブ】
http://www.alito.co.jp/stc2008.html

■ 本プロジェクト概要
 STC2008は、開発者及び、技術者が集中して開発・制作に取り組めるよう、すべての環境を提供します。
■ 受付 2008年3月17日(月)より随時受付
■ 事業テーマ(どのプログラム言語でも可)
・ソフトウェア製品の開発
・ソフトウェアサービス
・ソフトウェア技術開発
・その他、ネット系開発・技術に特化したサービス 
■ 参加条件
・個人での応募、または開発チームでの応募可
・自分の開発・制作に対してフルコミットメントができること
・独創性・オリジナリティのあるアイデアであること
・自分のアイデアを開発するにあたって、エントリー者本人が技術力を持っていること
・現在、起業をしていないが、将来的に起業の意思があること
・年齢が15歳〜40歳までであること
・ALITO株式会社の本社(東京都中央区)で作業が可能なこと
・ビジネス化を予定しているアイデアや技術に対する特許・著作権などの権利をALITO株式会社以外の個人、または団体が保有していないこと


もし、興味がありましたら、このプロジェクトに参加して、色々なプログラマーやエンジニアの方々とそれぞれの目標に向って頑張ってみませんか?

http://www.alito.co.jp/stc2008_entry.html
こちらからご応募頂けますので、是非ご応募をよろしくお願い致します。


長文にて申し訳ございません。


企画・運営・事業支援 ALITO株式会社
スプリング・テック・キャンプ2008(STC2008)事務局 担当:井上
(土・日曜、祝日を除く、午前10時から午後18時まで)
Posted by STC2008 at 2008年03月25日
コメントを書く
お名前: [必須入力]

メールアドレス:

ホームページアドレス:

コメント: [必須入力]

認証コード: [必須入力]


※画像の中の文字を半角で入力してください。
この記事へのトラックバックURL
http://blog.seesaa.jp/tb/89175188

この記事へのトラックバック

XML宣言の記述
Excerpt: XHTMLではHTMLと違って、「文章の初めにXML宣言を記述しなさい」っという...
Weblog: CSS-mania
Tracked: 2008-03-12 10:22
×

この広告は1年以上新しい記事の投稿がないブログに表示されております。