質問
私は最終的にはgzip圧縮された後、ページ上に印刷された文書を保持するための責任があるDocument
クラスを持っています。そのドキュメント内のドキュメントのDOCTYPEを保持しています。私が直面しています問題は、正しく文書型を表示する実装する方法である。
たとえば:私が最も頻繁に使用されている人気のDoctypeの配列を作成することができ、あなたが「厳しい」と入力した場合、その後、それが自動的にHTML 4.01 Strict
を選ぶだろう。知られDOCTYPEがない場合、それはあなたがカスタムDOCTYPEに入力していると仮定して、ちょうどあなたが入力したものを表示することができます。これは、エラーが発生しやすいと思わclumbsyます。
$document->setDoctype("strict"); ..... in a class far, far, away........ function setDocType($type) { if(in_array($type, $this->doctypes)) { $this->doctype = $this->doctypes[$type]; } else { $this->doctype = $type; } }
それを行うための別の方法は、単純に全体のDOCTYPEに毎回入力する必要がすることです。
$document->setDoctype('<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01//EN" "http://www.w3.org/TR/html4/strict.dtd">');
あなたはこの問題に対処する方法を?
解決
これは依存しています。あなたがそのような状況の例外を考慮すれば、誰かが未定義のDOCTYPEを使用しようとしたとき、あなたはおそらく、例外をスローする必要があります。また、実際のDOCTYPEを設定する前に、そのメソッドを使用してカスタムDOCTYPEと力を定義するための方法を提供することができます。
私はこのような何かをするだろう
class Document {
private $doctypes = array(
'html4' => '...',
'xhtml1strict' => '...'
);
private $doctype = null;
public function addCustomDocType($name, $definition) {
if (empty($this->doctypes[$name])) {
$this->doctypes[$name] = $definition;
} else {
throw new Exception('Definition already exists');
}
}
public function setDocType($name) {
if (!empty($this->doctypes[$name])) {
$this->doctype = $this->doctypes[$name];
} else {
throw new Exception('Doctype not found');
}
}
}
あなたはDOCTYPE定義を入力する必要があります第二の溶液は、IMO醜いであり、私はそれを避けるだろう。
他のヒント
私はあなただけのdoctype W3Cのリストをチェックアウトするべきだと思います。 http://www.w3.org/QA/2002/ 04 /有効-DTD-するlist.htmlする
ユーザーがカスタムDOCTYPEに入ることを許可されていますか?
おそらく、基本クラスを作成します。
ドキュメント
そして元、それぞれのタイプにそれを拡張します:
StrictDocは、ドキュメントを拡張します など。
そして、それはそれぞれの独自のドキュメントタイプを設定します。あなたはドキュメントタイプに追加したい場合は、単にドキュメントを拡張する別のクラスを作成します。