2009-12-11 87 views
0

我正在使用FreeTextBox編輯器來獲取用戶創建的一些HTML。 與此問題是這個編輯器不是在「<>」例外的HTML實體中轉換特殊字符。我不能使用theHTML = Server.HtmlEncode(theHTML),因爲它會轉換所有包含標籤和參數的HTML,並且我不想創建theHTML.Replace行的不可確定列表。將特殊字符轉換爲HTML實體,而不更改標記和參數

是否有任何其他功能或方法可用於轉換爲HTML實體,但只有外部標籤?

+0

爲了確保我理解你,你希望將保留的HTML字符(&,<,>,',「,...)轉換爲HTML實體,但不是<,>,標記中的」,「本身是否正確? – David 2009-12-11 22:20:05

+0

只能轉換外部標籤。 – backslash17 2009-12-11 22:44:45

回答

0

搜索了很多後,我發現我使用了FreeTextBox組件的錯誤屬性。該物業是ConvertHtmlSymbolsToHtmlCodes這必須是真實的。

它還有助於使用FormatHtmlTagsToXhtml如果您需要將您的代碼插入到XHTML頁面,因爲它使用了有關標籤參數和周圍引號的強大驗證。

0

我建議使用Linq to Xml解析每個元素,並編碼每個元素和屬性節點的值。我會試着想出一些代碼,但嘿它是星期五的下午5點!

1

如果你有一個混合<意思是開始一個標籤和<意思是一個文字小於號,你不可能告訴哪個是'標籤'忽略,哪個不是。

所有你能做的只是檢測<用法是不是一個常規方式形成的開始或結束標記,使用不可靠的討厭的正則表達式是這樣的:

<(?!\w+(\s+\w+="[^"<]*")*\s*/?>|/\w+\s*>) 

,並與&lt;替換它們。同樣,對於&&amp;

&(?!\w+;|#\d+;|#x[0-9A-Fa-f]+;) 

>通常沒有進行轉義。)

這將不允許建設要素的每一個可能的有效途徑,它將使破誤嵌套元素,以及不存在的實體,並會混淆非註釋等非元素構造。由於正則表達式無法解析HTML,更不用說添加了脆碎碎片的HTML。

所以它幾乎不是萬無一失的。如果你想要正確的標記,當他們不小心讓div打開的時候不會打破你的頁面,那麼最好的第一步就是將它解析爲XHTML,如果它不是格式良好的XML,就會拒絕它。

如果您有一個富文本編輯器組件,可以生成文字爲<的輸出,那麼是時候用不太可怕的東西替換該組件。但總的來說,讓用戶創建HTML並不是一個好主意,因爲他們真的是垃圾。 Plus允許任何人輸入HTML,使他們能夠完全控制使用JavaScript破壞網站及其安全性。簡單的文本標記語言往往是一個勝利。

+0

文字<是精確唯一一個逃脫! – backslash17 2009-12-11 23:13:22

+0

所以你唯一的問題是光標&符號?第二個正則表達式應該解決這個問題。 – bobince 2009-12-11 23:57:58

相關問題