删除不必要的空格 - “不必要”是关键

时间:2012-08-23 00:37:05

标签: html whitespace bandwidth

为了减少带宽,我试图去除不必要的空白。对于“不必要的”,我指的是任何垂直空白,以及行的开头或结尾处的水平空格,但如果它位于<textarea>标记中则不是。

虽然我对The Pony He Comes并不陌生,但我相当确定完整的HTML解析器对于此任务来说是过度的。根据我的理解,正则表达式可以工作。

我现在的正则表达式是:

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

这似乎剥离了我在上面指定的空格,除了<textarea>规则。我的问题归结为:我怎样才能确保替换不会在指定的边界内发生?可以安全地假设所有HTML实体都在<textarea>内正确转义。

1 个答案:

答案 0 :(得分:2)

如果你有html:

<P>a
b</P>

然后剥离垂直空白,最后使用ab代替a b。所以你需要把它转换成一个空间(没有意义)。

只有标签附近的剥离才会有帮助,因为您可以(例如)彼此靠近两个SPAN标签。

您可以删除的行的开头或结尾处的空格 - 但这只是因为您已经有了垂直空格。

因此,如果你真的想要这样做,你可以将多个空格出现在一个空格中。

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

但更糟糕的是value的{​​{1}}属性。你不想搞砸 - 但是如果没有解析器,它甚至是完全不可能的:

input

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

避免标记内部也无济于事,因为您可以合法地将<INPUT name="value='hello'" value='name="hi"'> 放在评论中。