2

帯域幅を削減するために、不要な空白を取り除こうとしています。「不要」とは、縦方向の空白、および行の先頭または末尾の横方向の空白を指していますが、<textarea>タグ内にある場合はそうではありません。

私はThe Pony He Comesをよく知っていますが、完全な HTML パーサーはこのタスクにはやり過ぎだと確信しています。私の理解では、正規表現が機能する可能性があります。

私が今持っている正規表現は次のとおりです。

$out = preg_replace("/[ \t]*\r?\n[ \t]*/","",$in);

<textarea>これは、ルールを除いて、上で指定した空白を取り除いているようです。私の質問は次のとおりです。指定された境界内で交換が行われないようにするにはどうすればよいですか? すべての HTML エンティティが<textarea>s 内で適切にエスケープされると安全に想定できます。

4

1 に答える 1

2

html がある場合:

<P>a
b</P>

そして、最終的にabの代わりになる垂直方向の空白を取り除きますa b。そのため、スペースに変換する必要があります (これは無意味です)。

SPAN(たとえば) 2 つのタグが互いに近くにある可能性があるため、タグの近くを剥がすだけでは役に立ちません。

行頭または行末の空白は取り除くことができますが、それはすでに垂直方向の空白があるためです。

したがって、本当にこれを行いたい場合は、複数の空白を 1 つのスペースにまとめることができます。

JavaScript、入力フィールド、事前設定、およびテキストエリアを回避した場合は、問題ありません。しかし、完全なパーサーがなければ、実際にそれらを回避することは不可能です! たとえば、誰かが<TEXTAREA>コメントの中に a を入れることができます。パーサーがなければ、テキストエリアの最後を探し続け、それを見つけることはできません。

しかし、さらに悪いのは のvalue属性ですinput。あなたはそれを台無しにしたくありません-しかし、パーサーなしでそれを見つけることさえ完全に不可能です:

<INPUT name="value='hello'" value='name="hi"'>

色分けにより属性が明確になりますが、パーサーなしで見つけてみてください。

>タグの内側を避けても、コメントの内側に合法的に入れることができるため、どちらも役に立ちません。

于 2012-08-23T00:43:38.363 に答える