为了减少带宽,我试图去除不必要的空白。对于“不必要的”,我指的是任何垂直空白,以及行的开头或结尾处的水平空格,但如果它位于<textarea>
标记中则不是。
虽然我对The Pony He Comes并不陌生,但我相当确定完整的HTML解析器对于此任务来说是过度的。根据我的理解,正则表达式可以工作。
我现在的正则表达式是:
$out = preg_replace("/[ \t]*\r?\n[ \t]*/","",$in);
这似乎剥离了我在上面指定的空格,除了<textarea>
规则。我的问题归结为:我怎样才能确保替换不会在指定的边界内发生?可以安全地假设所有HTML实体都在<textarea>
内正确转义。
答案 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"'>
放在评论中。