html - 去除不必要的空格 - "unnecessary"是关键

标签 html whitespace bandwidth

为了减少带宽,我正在尝试删除不必要的空白。我所说的“不必要”是指行首或行尾的任何垂直空白和水平空白,但如果它位于 <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/

相关文章:

html - 如何在阅读模式下更改表单颜色

html - 我想为我的 child 类(class)添加 css

linux - 如何阻止 `read` 与 `IFS` 将空白字符合并在一起?

c - 将空格作为参数传递

unit-testing - 减少测试带宽

android - Firebase 数据库带宽计算

javascript - 按钮在表格中不起作用?

html - 如何在类 UL 的 LI 中为 DIV 设置 CSS 规则?

java - JAVA中如何从URL中获取不省略空格的字符串

testing - 模拟 WAN 网络的最佳方式