4

現在、クライアントの HTML ソースを検証していますが、Omittag を持たない画像や入力ファイルに対して多くの検証エラーが発生しています。私は手動でそれを行いますが、このクライアントには文字通り何千ものファイルがあり、そうでない多くのインスタンスがあります。

このクライアントはいくつかの img タグを検証しました (何らかの理由で)。

追加するOmittagがないかどうかを確認するために実行できるUNIXコマンドがあるかどうか疑問に思っています。

簡単な検索を実行し、次のコマンドに置き換えました。

find . \! -path '*.svn*' -type f -exec sed -i -n '1h;1!H;${;g;s/<b>/<strong>/g;p}' {} \; 

しかし、これほど大きなものは決してありません。どんな助けでも大歓迎です。

4

2 に答える 2

4

これを試して。ファイルを.orig調べ、各ファイルのバックアップを作成し(perlの-i演算子)、andをandに置き換え<img><input>タグ付けし<img />ます<input >

find . \! -path '*.svn*' -type f -exec perl -pi.orig -e 's{ ( <(?:img|input)\b ([^>]*?) ) \ ?/?> }{$1\ />}sgxi' {} \;

与えられた入力:

<img>  <img/>  <img src="..">  <img src="" >
<input>  <input/>  <input id="..">  <input id="" >

ファイルを次のように変更します。

<img />  <img />  <img src=".." />  <img src="" />
<input />  <input />  <input id=".." />  <input id="" />

正規表現が行っていることは次のとおりです。

s{(<(?:img|input)\b ([^>]*?)) # capture "<img" or "<input" followed by non-">" chars
  \ ?/?>}                     # optional space, optional slash, followed by ">"
{$1\ />}sgxi                  # replace with: captured text, plus " />"
于 2008-10-28T06:15:29.520 に答える
0

上部のコメントで私が尋ねた質問を参照してください。

GNU sedを使用していて、タグに末尾を追加/してXMLに準拠さ<img /><input />、コマンドのsed式を次の式に置き換えようとしていると仮定すると、次のようになります。'1h;1!H;${;g;s/\(img\|input\)\( [^>]*[^/]\)>/\1\2\/>/g;p;}'

これは簡単なテストファイルにあります(SOのカラーライザーは奇抜なことをしています):

$ cat test.html
This is an <img tag> without closing slash.
Here is an <img tag /> with closing slash.
This is an <input tag > without closing slash.
And here one <input attrib="1" 
    > that spans multiple lines.
Finally one <input
  attrib="1" /> with closing slash.

$ sed -n '1h;1!H;${;g;s/\(img\|input\)\( [^>]*[^/]\)>/\1\2\/>/g;p;}' test.html
This is an <img tag/> without closing slash.
Here is an <img tag /> with closing slash.
This is an <input tag /> without closing slash.
And here one <input attrib="1" 
    /> that spans multiple lines.
Finally one <input
  attrib="1" /> with closing slash.

GNU sedの正規表現構文と、複数行の検索/置換を行うためのバッファリングの仕組みを次に示します。

あるいは、悪いHTMLをサニタイズするために設計されたTidyのようなものを使用することもできます。これは、いくつかの単純な検索/置換よりも複雑なことを行う場合に行うことです。libtidyTidyのオプションはすぐに複雑になるため、通常は、必要なオプションを呼び出して設定する、選択したスクリプト言語(Python、Perl)でスクリプトを作成することをお勧めします。

于 2008-10-28T06:16:18.847 に答える