2010-05-11 25 views
42

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

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

编辑:对不起,我忘了提及字符串将属性,所以任何类型的标签不会工作。

+2

也许你可以只使用一堆''标签? – Thomas 2010-05-11 16:03:28

+1

我同意托马斯,但我要补充他应该一类添加到他们喜欢的 这就是为什么他们会很容易找到和操作。 – joatis 2010-05-11 16:06:58

回答

112

‌ - 零宽不连字(见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> 
+0

完美!该代码可以做到这一点。 – noah 2010-05-13 17:26:12

+1

你可能只是救了我几个小时的谷歌搜索 – Linas 2013-05-27 18:42:33

+1

真棒!谢谢。 – 2013-07-24 19:48:26

4

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

否则,你可以插入一个空白字符,你的程序尚不输出作为HTML的一部分,就像一个制表符(\x09),垂直制表(\x0b),裸回车(\x0d)—无它旁边的换行符,ala Windows文本编码—或者只是一个空字节(\x00)。

+0

垂直标签!这是一个很好的。我会尝试的。 – noah 2010-05-11 20:28:21

+0

Windows从来没有使用回车没有一个新的行后;它总是连续使用。你正在想着旧的Mac电脑。 – 2010-05-11 21:24:38

+0

因此,空白字符的问题是DOM将会正常化,否则会混淆它们,因此它们不能在以后可靠地找到。 VT往往会转换为DOM中的空格。 – noah 2010-05-12 14:10:49

3

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

+0

对不起,忘了提及字符串也出现在属性中,所以标签最终会被编码。 – noah 2010-05-11 20:27:48

0

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

+0

与XSS无关。什么是LTR标记? – noah 2010-05-12 13:21:39

+0

它们用Unicode标记从左到右的书写方向。无论如何,当语言从左到右时,它们没有任何影响。 – Tgr 2010-05-12 16:00:35