如何从 html 属性值中删除字符

How to remove characters from html attribute values?

本文关键字:删除 字符 属性 html      更新时间:2023-09-26

根据 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 执行此操作。 这是否可能,或者是否有其他情况返回字符有意义? 有没有办法区分?

根据HTML4.01规范(http://www.w3.org/TR/html4/struct/global.html#h-7.4.4.2(,<meta />元素的content=""属性是CDATA,这意味着空格并不重要:

CDATA 是文档字符集中的字符序列,可能包括字符实体。用户代理应按如下方式解释属性值:

  • 将字符实体替换为字符,
  • 忽略换行,
  • 将每个回车符或制表符替换为单个空格。
  • 用户代理可以忽略 CDATA 属性值中的前导和尾随空格(例如,"myval"可能被解释为"myval"(。作者不应声明带有前导或尾随空格的属性值。

所以看起来htmlcompressing的作者是错误的。

无论如何,尽管有相反的可怕警告,但您可能可以使用正则表达式来解决此问题。

我忘记了在正则表达式中组合"仅匹配此组,并在此子区域中替换"的语法,但是此技巧有效:

这个简单的正则表达式将捕获 content="" 属性的内容:

<meta.+content='(.*)'>

获得内容后,您可以进行简单的''r', ''n', ' ' -> ' '替换。

只要关于内容属性是 CDATA 的规范是正确的,网站站长就可以通过 JavaScript 使用给定示例中任何属性的值,例如"元"标记的"内容",压缩属性的值会改变预期结果。

因此,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,该站点的目标是在不改变结果布局或功能的情况下压缩文档。

现场示例:http://jsfiddle.net/7Qb74/