【问题标题】:Invisible Delimiter for Strings in HTMLHTML中字符串的不可见分隔符
【发布时间】:2010-05-11 16:00:20
【问题描述】:

我需要一种方法来识别 HTML 标记中的某些字符串。我知道字符串是什么,但它们可能是文档中其他字符串的子字符串。为了找到它们,我输出了一个特殊的分隔符(当前使用\032)。在页面加载时,我们遍历 HTML 并记录字符串的位置,并删除分隔符。

不幸的是,大多数浏览器都会显示分隔符,直到我们找到并删除它们。如果可能的话,我想避免这种情况。是否存在将保留在 HTML 内容中的字符或字符串(因此注释不起作用)但对用户不可见?它还需要是不太可能出现在字符串旁边的东西,所以像   这样的东西也不起作用。

编辑:对不起,我忘了提到字符串将在属性中,所以任何类型的标签都不起作用。

【问题讨论】:

  • 也许你可以用一堆<span>标签?
  • 我同意 Thomas,但我想补充一点,他应该为它们添加一个类,例如 这就是为什么它们很容易找到和操作的原因。跨度>

标签: html non-printing-characters


【解决方案1】:

‌ - 零宽度非连接符(参见http://htmlhelp.org/reference/html40/entities/special.html

如果这已经出现在您的文本中,请将其加倍(例如:‌‌mytext‌‌


根据评论进行编辑:适用于 Firefox 3。请注意,您必须搜索实体的 Unicode 值。

<html>
<body>
    <div id="test">
        This is a &zwnj;test
    </div>

    <script type="application/javascript">
        var myDiv = document.getElementById("test");
        var content = myDiv.innerHTML;
        var pos = content.indexOf("\u200C");
        alert(pos);
    </script>
</body>
</html>

【讨论】:

  • 谢谢你...我只是用它来处理带有斜线连接的长单词的字符串。我想向浏览器“建议”它在斜杠处换行,所以我插入了 myString.replace("/", "/\u200c")。
【解决方案2】:

您可以将它们插入到&lt;span&gt; 元素中。这仅适用于页内文本(不适用于属性等)。

否则,您可以插入您的程序尚未作为 HTML 的一部分输出的空白字符,例如制表符 (\x09)、垂直制表符 (\x0b)、回车符 (@ 987654324@) — 旁边没有换行符,类似于 Windows 文本编码 — 或者,只是一个空字节 (\x00)。

【讨论】:

  • Windows 从不使用回车,后面没有换行;它总是连续使用两者。您正在考虑旧的 Mac。
  • 所以空白字符的问题是 DOM 会规范化,否则会弄乱它们,因此以后无法可靠地找到它们。 VT 往往会在 DOM 中转换为空格。
  • @Michael Madsen - 这就是我的意思;因为foo\x{0d}\x{0a}bar 是 Windows 标准行格式化方法,不会匹配 /\x0d(?[^\x0a]*)\x0d。感谢召回旧的 Mac 编码!曾经尝试过type-在 Windows 终端上使用该编码的文件吗?全部打印在一条线上! :-)
【解决方案3】:

我想插入的最好的东西,在浏览器上不可见,将是一对带有一些特殊 id 的标签,比如&lt;span id="delimiter" class="Delimiter"&gt;&lt;/span&gt;。这不会显示在内容上,但可以出现在文档中。您无需删除它们。

【讨论】:

  • 对不起,忘了说字符串也出现在属性中,所以标签最终会被编码。
【解决方案4】:

您可以使用left-to-right (LTR) marks。这是用于某种 XSS 测试吗?如果是这样,这可能很有趣:Taint support for PHP

【讨论】:

  • 它们在 Unicode 中标记从左到右的书写方向。无论如何,当语言是从左到右时,它们不起作用。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2022-06-16
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2021-10-06
  • 2023-02-25
  • 1970-01-01
相关资源
最近更新 更多