63

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

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

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

4

4 回答 4

156

‌- 零宽度非连接器(参见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>
于 2010-05-11T20:37:29.343 回答
5

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

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

于 2010-05-11T16:08:30.653 回答
4

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

于 2010-05-11T16:08:57.250 回答
0

您可以使用从左到右 (LTR) 标记。这是用于某种 XSS 测试吗?如果是这样,这可能很有趣:Taint support for PHP

于 2010-05-11T21:20:51.033 回答