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标签彼此靠近。

您可以去除行首或行尾的空格 - 但只是因为您已经有垂直空格。

因此,如果您真的想这样做,您可以将多次出现的空白折叠到一个空格中。

如果您避免使用 javascript、输入字段、pre 和 textareas,您应该没问题。但是如果没有完整的解析器,就不可能真正避免这些!例如,有人可以<TEXTAREA>在评论中添加一个,如果没有解析器,您将继续寻找 textarea 的结尾而永远找不到它。

但更糟糕的是 的value属性input。您不想弄乱它-但是如果没有解析器,甚至完全不可能找到它:

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

颜色编码清楚地表明了属性是什么,但请尝试在没有解析器的情况下查找它们。

避免标签的内部也无济于事,因为您可以合法地放入>评论中。

于 2012-08-23T00:43:38.363 回答