1

CSS および Javascript ファイルへのパスを配列に格納するクラスがあります。このクラスは、最終ページの HTML 出力 ($output 変数に格納されます) もコンパイルします。$css および $js 配列をループして、$output の特定のポイントに HTML を挿入したいと考えています。CSS ファイルは直前に</head>配置する必要があり、JS ファイルは直前に配置する必要があります。</body>

HTML テンプレート ファイル内にプレースホルダー $cssFiles および $jsFiles 変数を含めることは、私にとって選択肢ではありません。

これをさらに複雑にするために (申し訳ありません)、 $output 内に</head>and/or</body>が存在しない場合、$output の最初にコードが挿入されるフェイルセーフが必要です。

これは正規表現の問題だと思いますが、パターンがどうなるかわかりません。

ありがとう!

4

2 に答える 2

4

単純なstr_replace()で十分な場合は、正規表現を使用しません。変更する文字列内の明確な場所を既に特定しているように聞こえる$outputので、次のようにします。

$cssStr = '';
$jsStr = '';
foreach($css as $path) {
    $cssStr .= '<link rel="stylesheet" type="text/css" media="screen"'.
     'href="'.$path.'"/>';
}
if (strpos($output,'</head>') !== false)) {
    $output = str_replace('</head>',$cssStr.'</head>',$output);
} else {
    $output = $cssStr . $output;
}

foreach($js as $path) {
    $jsStr .= '<script type="text/javascript" src="'.$path.'"></script>';
}
if (strpos($output,'</body>') !== false)) {
    $output = str_replace('</body>',$jsStr.'</body>',$output);
} else {
    $output = $jsStr . $output;
}
于 2009-09-07T04:15:29.873 に答える
1

簡単な作業ではない HTML を "解析" する意思があることを考えると、正規表現が実際にその仕事に適したツールであるかどうかはわかりません。

あなた</head></body>いつもそこにいるなら、単純なものを使うことをお勧めしますstr_replace:より単純で、正規表現よりも高速です。

それらが常にそこにあるとは限りません...もっと難しくなると思います...

「頭の終わり」の部分については、ここにあるかどうかを確認できますstrposたとえば、を使用) ; </title>そうでない場合は、タグ(simple : use str_replace)の後にコードを挿入するか、<meta>タグ (最初の " の前に挿入) を挿入してみてください。これはおそらく head セクションの終わりにはなりませんが、何もないよりはましです。

「体の終わり」の部分については、</body>そこにあるかどうかを確認できます。そうでない場合は、コードを HTML 文字列全体に連結するだけです。


いずれにせよ、HTML を「解析」するには、正規表現を使用しませんが、代わりに、PHP にバンドルされている DOMDocument クラスやそのDOMDocument::loadHTMLメソッドなどの DOM 操作ツールを使用します。

于 2009-09-07T04:12:04.577 に答える