簡體   English   中英

智能HTML編碼

[英]Smart HTML encoding

我正在尋找做某種“智能”HTML編碼的最佳方法。 例如:

From: <a>Next >></a> to: <a>Next gt;gt;</a>
From: <p><a><b><< Prev</b></a><br/><a>Next >></a></p> to: <p><a><b>&lt;&lt; Prev</b></a><br/><a>Next gt;gt;</a></p>

因此,只有文本的非XML / HTML部分才會被編碼,就像調用HtmlEncode一樣。

有什么建議?

編輯:這應該盡可能輕。 傳入的文本將來自不了解HTML編碼的用戶。

是: 永遠不要寫HTML到您的源代碼。 而是使用像DOM這樣的API來處理所有編碼問題。

如果你想要一個可靠且完全可靠的C#解決方案(但是重量級),那么我將使用HTML Agility Pack庫 然后,您可以遍歷節點並對內容進行HTML編碼。 它比正則表達式更具防彈性,但顯然更強烈。

如果你想在客戶端做它,那么使用JQuery。 請參閱使用jQuery對HTML實體進行編碼

您可能正試圖解決錯誤的問題。 (我知道這不是你想聽到的。)

如果允許用戶將未編碼的>><<寫入HTML,那么可能他們也可以編寫<><b> ,在這種情況下,你無法可靠地區分文本和標記。 (不要緊,這會讓你容易受到XSS攻擊。)

您必須截取文本並在將其插入HTML 之前對其進行編碼。 可能你應該解釋導致你問題的工作流程。 必須有更好的方法來解決它。

編輯以回應評論:根本無法可靠地編碼輸入,可以同時輸入文本或HTML。 無論如何,如果用戶的技術足以輸入原始HTML,可能他們能夠編寫實體 - 否則不應該首先輸入原始HTML。 如果HTML輸入僅適用於高級用戶,則可以使用復選框指示輸入是文本還是HTML。 但您應該考慮使用富文本編輯器。

你有沒有想過使用tidy.net? 你可以把你的用戶輸入扔進去,看看它是什么,非常,非常非常好,並將垃圾變成你真正想要的東西。 它是一個DLL和我相信的所有托管代碼,所以你可以很容易地插入它。

至於no to regexp樂隊旅行車,我不同意。 如果數據有限(你不說它是不是),那么你可以想出一些規則,至少試着驗證輸入字符串,如果沒有清理它。 我懷疑你的數據確實可以是任何情況,在這種情況下你會更好地使用其他東西,但不應該完全排除它。

我可能會嘗試為此寫一個很好的正則表達式。 你是在代碼背后(C#)或在客戶端使用JavaScript嗎?

http://www.regular-expressions.info/

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM