为了减少带宽,我正在尝试删除不必要的空白。我所说的“不必要”是指行首或行尾的任何垂直空白和水平空白,但如果它位于 <textarea>
中,则不是这样。标签。
虽然我对The Pony He Comes并不陌生,我相当确定完整的 HTML 解析器对于这项任务来说是大材小用。据我了解,正则表达式可以工作。
我现在拥有的正则表达式是:
$out = preg_replace("/[ \t]*\r?\n[ \t]*/","",$in);
这似乎去掉了我上面指定的空白,除了<textarea>
规则。我的问题归结为:如何确保替换不会在指定范围内发生?可以安全地假设所有 HTML 实体都在 <textarea>
内正确转义。 s。
最佳答案
如果您有 html:
<P>a
b</P>
然后你去掉垂直空白,你最终会得到 ab
而不是a b
。因此您需要将其转换为空格(这是毫无意义的)。
仅在标签附近剥离也无济于事,因为您可能有(例如)两个 SPAN
标签彼此靠近。
您可以删除行首或行尾的空白 - 但这只是因为您已经有了垂直空白。
因此,如果您确实想这样做,您可以将多次出现的空格折叠为一个空格。
如果您避免使用 javascript、输入字段、pre's 和文本区域,您应该没问题。但如果没有完整的解析器,就不可能真正避免这些!例如,有人可以输入 <TEXTAREA>
在注释中,如果没有解析器,您将一直寻找文本区域的末尾,但永远找不到它。
但更糟糕的是value
input
的属性。你不想搞乱它 - 但如果没有解析器就完全不可能找到它:
<INPUT name="value='hello'" value='name="hi"'>
颜色编码清楚地表明了属性是什么,但请尝试在不使用解析器的情况下找到它们。
避免标签内部也没有帮助,因为您可以合法地放置 >
在评论中。
关于html - 去除不必要的空格 - "unnecessary"是关键,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/12083262/