8

スタイルタグを含むユーザー生成のHTMLページをきれいにするためにphp tidyを使用しています:

<style type="text/css">
    body {
        padding-top: 60px;
        padding-bottom: 40px;
    }
</style>

しかし、Tidy を実行すると、スタイル タグ データは CData に変換されます。私が Tidy を使用する主な目的は、ファイルを修復することと、適切なインデントを行うことです。

<style type="text/css">
/*<![CDATA[*/
    body {
            padding-top: 60px;
            padding-bottom: 40px;
    }
/*]]>*/
</style>

私のTidy設定オプションは -

$options = array(
    'preserve-entities' => true,
    'hide-comments' => true,
    'tidy-mark' => false,
    'indent' => true,
    'indent-spaces' => 4,
    'new-blocklevel-tags' => 'article,header,footer,section,nav',
    'new-inline-tags' => 'video,audio,canvas,ruby,rt,rp',
    'doctype' => 'omit',
    'sort-attributes' => 'alpha',
    'vertical-space' => false,
    'output-xhtml' => true,
    'wrap' => 180,
    'wrap-attributes' => false,
    'break-before-br' => false,
    'vertical-space' => false,
);

$buffer = tidy_parse_string($buffer, $options, 'utf8');
tidy_clean_repair($buffer);

私はたくさん検索してみましたが、PHP Tidy ライブラリは正確に「十分に文書化された」ものではありません! そのため、Tidy がコードをクリーンアップ/修復した後、手動で CDATA を削除することになりました。

$buffer = str_replace("/*<![CDATA[*/","",$buffer);
$buffer = str_replace("/*]]>*/","",$buffer);

このアプローチに関する私の問題は、スタイルタグデータのインデントがまだ台無しになっていることです(ページの残りの部分と正確に整列していません)

<style type="text/css">
    body {
        padding-top: 60px;
        padding-bottom: 40px;
    }
</style>

繰り返しになりますが、TIDY がページに CDATA を作成しないようにするにはどうすればよいでしょうか。

どうもありがとう!

4

3 に答える 3

8

オプションをオフにしoutput-xhtmlます。>CSS にはエスケープされていない文字が含まれている可能性があるため、XHTML には CDATA ラッピングが必要です。

于 2013-03-12T18:08:36.770 に答える
1

CDATA タグの追加は、ブラウザが「<」や「&」などの文字を HTML 構文ではなくリテラル文字として解析する必要があることを認識できるようにすることを目的としています。Tidy には、インライン css/javascript の生成を妨げる文書化された構成がないようです。唯一のオプションは、css を別のファイルに移動することです。その場合、CDATA タグは必要ありません。

詳細については、 http://tidy.sourceforge.net/docs/quickref.htmlおよびhttps://en.wikipedia.org/wiki/CDATAを参照してください。

于 2013-03-12T17:25:37.733 に答える
0

これを処理する 1 つの方法は、外部スタイルシートへのリンクを使用することです。

<link rel="stylesheet" type="text/css" media="screen, print" href="site.css">
于 2013-03-12T15:38:13.553 に答える