#author("2016-11-19T22:28:55+09:00","","")
#author("2016-11-19T22:30:25+09:00","","")
* HTML5 の DOCTYPE 宣言を出力できるようにする [#r70c828a]

- ページ: [[BugTrack2]]
- 投稿者: [[bee]]
- 優先順位: 普通
- 状態: 完了
- カテゴリー: 本体新機能
- 投稿日: 2016-10-14 (金) 08:52:12
- バージョン: 1.5.1
- リリース予定バージョン: 1.5.2
** メッセージ [#u596ac72]

関連: [[BugTrack2/387]]

かなり場当たり感が目立っていますが、まずは機能を追加して、次にデフォルト引数を変更、最終的にガラッとリファクタリングできればいいかなと思っています。

%%osdn.net/users/beec1e/pf/pukiwiki/ にコードを置いてあります。%%

適用しづらそうなので git format-patch で分割したものを用意しました。~
xrea.beecle.net/pukiwiki/?Patch/BugTrack2-389

一応 UnitTest も書いてみました(PHPUnit 4.8 なので PHP 5.3 以降限定ですが…)。~
PHP 5.3 以降で Regression していることはないはず。~
travis-ci.org/beec1e/pukiwiki/builds/167510623

*** patch [#xbbb8a7a]

 diff --git a/lib/html.php b/lib/html.php
 index 6b2fc6c..274dca8 100644
 --- a/lib/html.php
 +++ b/lib/html.php
 @@ -526,6 +526,7 @@ function pkwk_common_headers()
  }
 
  // DTD definitions
 +define('PKWK_DOCTYPE_HTML5',              28);
  define('PKWK_DTD_XHTML_1_1',              17); // Strict only
  define('PKWK_DTD_XHTML_1_0',              16); // Strict
  define('PKWK_DTD_XHTML_1_0_STRICT',       16);
 @@ -575,6 +575,9 @@ function pkwk_output_dtd($pkwk_dtd = PKWK_DTD_XHTML_1_1, $charset = CONTENT_CHAR
                 $option  = 'Transitional';
                 $dtd     = 'http:// www.w3.org/TR/html4/loose.dtd';
                 break;
 +       case PKWK_DOCTYPE_HTML5:
 +               $type    = PKWK_DTD_TYPE_HTML;
 +               break;
 
         default: die('DTD not specified or invalid DTD');
                 break;
 @@ -586,13 +589,17 @@ function pkwk_output_dtd($pkwk_dtd = PKWK_DTD_XHTML_1_1, $charset = CONTENT_CHAR
         if ($type == PKWK_DTD_TYPE_XHTML) echo '<?xml version="1.0" encoding="' . $charset . '" ?>' . "\n";
 
         // Output doctype
 -       echo '<!DOCTYPE html PUBLIC "-//W3C//DTD ' .
 -               ($type == PKWK_DTD_TYPE_XHTML ? 'XHTML' : 'HTML') . ' ' .
 -               $version .
 -               ($option != '' ? ' ' . $option : '') .
 -               '//EN" "' .
 -               $dtd .
 -               '">' . "\n";
 +       if ($pkwk_dtd == PKWK_DOCTYPE_HTML5) {
 +               echo "<!DOCTYPE html>\n";
 +       } else {
 +               echo '<!DOCTYPE html PUBLIC "-//W3C//DTD ' .
 +                       ($type == PKWK_DTD_TYPE_XHTML ? 'XHTML' : 'HTML') . ' ' .
 +                       $version .
 +                       ($option != '' ? ' ' . $option : '') .
 +                       '//EN" "' .
 +                       $dtd .
 +                       '">' . "\n";
 +       }
         // Output <html> start tag
         echo '<html';
 @@ -609,6 +616,8 @@ function pkwk_output_dtd($pkwk_dtd = PKWK_DTD_XHTML_1_1, $charset = CONTENT_CHAR
         if ($type == PKWK_DTD_TYPE_XHTML) {
                 // NOTE: XHTML 1.1 browser will ignore http-equiv
                 return '<meta http-equiv="content-type" content="application/xhtml+xml; charset=' . $charset . '" />' . "\n";
 +       } elseif ($pkwk_dtd == PKWK_DOCTYPE_HTML5) {
 +               return '<meta charset="' . $charset . '" />' . "\n";
         } else {
                 return '<meta http-equiv="content-type" content="text/html; charset=' . $charset . '" />' . "\n";
         }

--------
- 実装ありがとうございます。テストがあるのが良いですね!この変更を取り込んでさらにskinからも消してしまいます -- [[umorigu]] &new{2016-10-20 (木) 05:42:19};
- すみません。前言撤回です。一度パッチを取り込んでみたのですが、結局metaヘッダも変更になってしまうので(Content-Style-Type / Content-Script-Type削除)、DTD選択機能ごと削除しました [[osdn.net:projects/pukiwiki/scm/git/pukiwiki/commits/dc10e467307721d15ecc5ae485582af32aa7d64e]] -- [[umorigu]] &new{2016-11-15 (火) 08:24:08};
- それでいいと思います。 -- [[bee]] &new{2016-11-16 (水) 00:38:04};
-- が、<meta http-equiv="Content-Type" ... /> ではなく <meta charset="$charset" /> のほうが HTML5 っぽいような。 -- [[bee]] &new{2016-11-16 (水) 00:40:09};
-- <meta charset="utf-8"> は古いブラウザで解釈できないので意図して<meta http-equiv= ...>を使っています -- [[umorigu]] &new{2016-11-18 (金) 00:48:15};
--- 了解しました。古いブラウザは Content-Type ヘッダーで判断してもらえると嬉しいんですけどね…。 -- [[bee]] &new{2016-11-19 (土) 19:04:30};
-- Webサーバー上のコンテンツを見る場合はHTTPのContent-Typeヘッダーが優先されて問題にならないはずです。問題になるのは一度ファイル保存してローカルファイルをブラウザで閲覧するような場合ですね。 -- [[umorigu]] &new{2016-11-19 (土) 22:27:56};
- 関連: [[BugTrack/768]] -- [[bee]] &new{2016-11-16 (水) 00:54:54};
-- plugin/color.inc.php と plugin/paint.inc.php が PKWK_DTD_* に依存していますね…。あとでパッチを書こうかな。 -- [[bee]] &new{2016-11-16 (水) 00:57:36};
-- ありがとうございます。これには気づいていませんでした。対応しました [[osdn.net:projects/pukiwiki/scm/git/pukiwiki/commits/26564dde72fae6a939e74c2eff3f13e3dba37994]] -- [[umorigu]] &new{2016-11-18 (金) 00:48:48};
- 自分でテーマを書いていて気付いたのですが、<html lang="ja"> より <html lang="<?php echo LANG ?>"> のほうが嬉しいですね(細かいところをネチネチ言ってすみません) -- [[bee]] &new{2016-11-19 (土) 19:03:05};
-- 鋭いですね。ここは悩んだところなのですが、今私が運用しているサイトが LANG='en' でメニューは英語にした上で、ページコンテンツはほぼ日本語なのです。この場合おそらく<html lang="ja">が適切と思われます。PukiWiki利用は日本語が圧倒的に多いと思っているので、標準スキンは<html lang="ja>にして、<html lang="<?php echo LANG ?>を使うかどうかはカスタムスキン(スキン作者)側の実装に任せようと思いました -- [[umorigu]] &new{2016-11-19 (土) 19:32:14};
-- あるいは、lang属性無くした方が潔いのかも... -- [[umorigu]] &new{2016-11-19 (土) 19:37:55};
--- しかしlangを無くすと"ja"の情報がどこにもなくなってしまうので、ブラウザが言語判定に失敗して中国語フォントが表示に使われてしまったりするのを懸念しています -- [[umorigu]] &new{2016-11-19 (土) 20:19:41};
-- この BugTrack の範疇を超えた多言語対応の問題ですね…。~
%%Workaroud としては CONTENTS_LANG を pukiwiki.ini.php で設定できるようにして pukiwiki.skin.php で if (! defined(CONTENTS_LANG)) { define('CONTENTS_LANG', LANG); } して <html lang="<?= CONTENTS_LANG?>"> に持っていくとか?%% -- [[bee]] &new{2016-11-19 (土) 21:10:35};
-- %%既存のカスタムスキンは output_dtd() を使うか勝手に LANG を参照しているので、CONTENTS_LANG が設定されてなくても困らない、はず。%% -- [[bee]] &new{2016-11-19 (土) 21:14:58};
-- %%すでに UI_LANG もあるんですが、こっちを使うのはたぶん大工事になってしまうので…。%% -- [[bee]] &new{2016-11-19 (土) 21:20:28};
--- 本当は UI_LANG に 'en'、LANG に 'ja' を入れて umorigu さんの使い方ができればそれが最良だと思います。 -- [[bee]] &new{2016-11-19 (土) 21:24:50};
--- いや、UI_LANG = 'en' でメニューだけ英語可能みたいです。間違った情報を掲載してゴメンナサイ。 -- [[bee]] &new{2016-11-19 (土) 21:40:57};
--- でもディレクトリが別だから LANG='en' から LANG='ja', UI_LANG='en' にしようとするとコンバート作業が必要ですね…。 -- [[bee]] &new{2016-11-19 (土) 21:52:06};
--- なお、 wiki.en/ にあるファイルは英語版の「デフォルトコンテンツ」なので扱いがまた異なります -- [[umorigu]] &new{2016-11-19 (土) 22:12:45};
-- 本当ですね。UI_LANG: 'en'、LANG: 'ja' でメニューだけ英語にできました。確かにこれなら <html lang="<?php echo LANG ?>"> でよさそうです -- [[umorigu]] &new{2016-11-19 (土) 22:09:51};
-- なお、 wiki.en/ にあるファイルは英語版の「デフォルトコンテンツ」なので扱いがまた異なります -- [[umorigu]] &new{2016-11-19 (土) 22:12:45};
-- lang属性についてのご指摘に対応しました。 [[osdn.net:projects/pukiwiki/scm/git/pukiwiki/commits/0ded331a84bbf7ff874510990601335024129829]] どうもありがとうございます -- [[umorigu]] &new{2016-11-19 (土) 22:26:09};

#comment

トップ   編集 差分 履歴 添付 複製 名前変更 リロード   新規 一覧 検索 最終更新   ヘルプ   最終更新のRSS
Site admin: PukiWiki Development Team

PukiWiki 1.5.4+ © 2001-2022 PukiWiki Development Team. Powered by PHP 8.2.12. HTML convert time: 0.280 sec.

SourceForge