1

PHPでタグからすべてのスタイルを削除したい。

例えば。

オリジナル:

<body style="color:back;">

最後の:

<body>

次に例を示します。

$body_htm='<html>
<head>
<meta http-equiv="Content-type" content="text/html; charset=utf-8">
<title>[Some Title] some text...</title>
</head>
<body style="background-color: #F2F2F2; color: #222; font-family: georgia,serif; letter-spacing: -0.01em; line-height: 1.25; margin-bottom: 0.55em; font-size: 1.2em;">
<div style="background-color: #F2F2F2; border: 2px dotted #333; padding: 55px 0 55px 55px;">
<div style="background-color: #F2F2F2; width: 400px;">
<p style="margin-bottom:110px;"><b>Hello!!!</b></p>';

これを返す必要があります:

<html>
<head>
<meta http-equiv="Content-type" content="text/html; charset=utf-8">
<title>[Some Title] some text...</title>
</head>
<body>
<div>
<div>
<p><b>Hello!!!</b></p>';

何か案は?

4

3 に答える 3

5

非常に単純な置換でおそらく実行できます。

preg_replace( '/style=(["\'])[^\1]*?\1/i', '', $subject, -1 );

お役に立てれば

于 2011-10-12T13:00:10.620 に答える
2

styleそもそも属性の挿入を止められない場合は、 HTML Purifierのようなものをお勧めします。これは、まさにこの種の問題に対して十分に開発されたソリューションであり、将来、最小限の労力でより多くの HTML フィルタリング (XSS 防止など) を実行することもできます。

正規表現ソリューションを使用すると問題が発生する可能性があります。通常は、HTML Purifier のようなものを自分で本質的に再作成するまで (そしてその過程で正気を失うまで)、ますます複雑な正規表現を修正する必要があります。DOM拡張機能を使用すると、無効なマークアップが渡された場合にも問題が発生する可能性があります。HTML Purifier はおそらくすべての点で完璧ではありませんが、必要なことは実行でき、サポートされています。

于 2011-10-12T13:20:29.640 に答える
0
  1. スタイルタグが含まれていないという出力を変更できませんか(インラインスタイルはとにかく悪い習慣です)?

  2. 独自の CSS を含めて、出力!importantを変更するルールでbody プロパティを上書きすることは可能ですか?

  3. 両方の質問に「いいえ」と答えた場合は、正規表現または DOM/XML パーサーを使用して削除してください。

于 2011-10-12T12:52:37.860 に答える