2010-05-11 29 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