根据htmlcompressor.com的作者,由于它们具有语义含义,因此无法完成。
以下是具体示例:
<meta name='description' content='Foo lets you save and share all your
web bookmarks / favorites in one place. It is free with no advertising for life, and
has straight forward privacy controls.'>
删除你拥有的返回字符:
<meta name='description' content='Foo lets you save and share all your web bookmarks / favorites in one place. It is free with no advertising for life, and has straight forward privacy controls.'>
这是我要发送到浏览器的单行。
我想使用一些字符串操作为我的所有HTML执行此操作。这是可能做的还是其他情况下返回字符有意义?有没有办法区分?
答案 0 :(得分:2)
根据HTML4.01规范(http://www.w3.org/TR/html4/struct/global.html#h-7.4.4.2),content=""
元素的<meta />
属性为CDATA
,这意味着空格不重要:
CDATA是文档字符集中的一系列字符,可能包含字符实体。用户代理应解释属性值,如下所示:
- 用字符替换字符实体
- 忽略换行,
- 用一个空格替换每个回车或标签。
- 用户代理可以忽略CDATA属性值中的前导和尾随空格(例如,“myval”可以被解释为“myval”)。作者不应声明带有前导或尾随空格的属性值。
所以看起来htmlcompression的作者是错误的。
无论如何,despite dire warnings to the contrary,您可能会使用正则表达式来解决此问题。
我已经忘记了在正则表达式中组合“仅匹配此组,并在此子区域中替换”的语法,但这个hack有效:
这个简单的正则表达式将捕获content=""
属性的内容:
<meta.+content='(.*)'>
获得内容后,您可以直接'\r', '\n', ' ' -> ' '
替换。
答案 1 :(得分:0)
每当关于内容属性为CDATA的规范是正确的时,网站管理员可以通过JavaScript使用任何属性的值,例如给定示例中“meta”标记的“content”,并且压缩属性的值将会改变预期的结果。
所以htmlcompressor.com的作者是正确的,因为它们具有压缩目的的语义含义。
<meta id="m1" name="item1" content="Sample stuff:
1. This text is multiline on purpose.
2. And the author expects it to remain this way after compression.
So yes, it does matter...">
压缩了相同的元标记:
<meta id="m2" name="item2" content="Sample stuff: 1. This text is multiline on purpose. 2. And the author expects it to remain this way after compression. So yes, it does matter...">
并显示差异:
<script>
alert('"'
+ document.getElementById('m1').content
+ '"\n\n---------------\n\n"'
+ document.getElementById('m2').content + '"'
);
</script>
Afaik,该网站的目标是在不改变最终布局或功能的情况下压缩文档。