関連: 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
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"; }