簡體   English   中英

將>轉換為HTML字符串中的HTML實體等效項

[英]Convert > to HTML entity equivalent within HTML string

我正在嘗試將>字符的所有實例轉換為其HTML實體等效項>,在包含HTML標記的HTML字符串中。 我能用最好的解決辦法就是使用正則表達式。

這是我到目前為止所擁有的:

        public static readonly Regex HtmlAngleBracketNotPartOfTag = new Regex("(?:<[^>]*(?:>|$))(>)", RegexOptions.Compiled | RegexOptions.Singleline);

我遇到的主要問題是隔離不屬於HTML標記的單個>字符。 我不想轉換任何現有標簽,因為我需要保留HTML以進行渲染。 如果我不轉換>字符,我會得到格式錯誤的HTML,這會導致瀏覽器出現渲染問題。

這是要解析的測試字符串的示例:

"Ok, now I've got the correct setting.<br/><br/>On 12/22/2008 3:45 PM, jproot@somedomain.com wrote:<br/><div class"quotedReply">> Ok, got it, hope the angle bracket quotes are there.<br/>><br/>> On 12/22/2008 3:45 PM, > sbartfast@somedomain.com wrote:<br/>>> Please someone, reply to this.<br/>>><br/>><br/></div>"

在上面的字符串中,不應將屬於HTML標記的>字符轉換為>。 所以這:

<div class"quotedReply">>

應該成為這樣的:

<div class"quotedReply">&gt;

另一個問題是上面的表達式使用了非捕獲組,除了匹配在組1中這一事實之外沒什么問題。我不太確定如何僅在組1上進行替換並保留其余的組。比賽。 似乎MatchEvaluator並沒有真正做到這一點,或者我現在無法想象它。

我懷疑我的正則表達式可以用一些愛。

有人有什么好主意嗎?

你為什么要這樣做? >做什么有害? 我遇到的大多數解析器都非常滿意,而不需要將其轉義為實體。

另外,在將內容字符串與包含HTML標記的字符串連接之前,使用HtmlUtilty.HtmlEncode對內容字符串進行正確編碼會更合適,因此,如果這是在您的控制之下,您應該考慮在那里處理它。

訣竅是捕獲不是目標的所有內容,然后將其與更改的文本一起重新插入,如下所示:

Regex.Replace(str, @"\G((?>[^<>]+|<[^>]*>)*)>", "$1&gt;");

但安東尼是對的:文本節點中的右尖括號不應該引起任何問題。 將HTML與正則表達式匹配是棘手的; 例如,注釋和CDATA幾乎可以包含任何內容,因此強大的正則表達式必須具體匹配它們。

也許將您的HTML讀入XML解析器,該解析器應該為您完成轉換。

您是在談論HTML標記內的>字符(如Java的innerText中),還是HTML標記的參數列表?

如果您只想清理開始和結束標記之間的文本,那應該相當簡單。 只需找到任何> char,並將其替換為&gt ;. (我也會用&lt標簽來做),但是HTML渲染引擎應該為你照顧這個......

舉一個你想要消毒的例子,也許我們找到最好的解決方案。

拉里

您是否可以將字符串讀入XML文檔並查看值並將>替換為&gt; 在價值觀中。 這將需要遞歸進入文檔中的每個節點,但這不應該太難。

Steve_C,你可以試試這個RegEx。 這將捕獲引用1中的任何HTML標記,並且標記之間的文本存儲在捕獲2中。我沒有完全測試它,只是將其丟棄,以防它可能有所幫助。

<([A-Z][A-Z0-9]*)[^>]*>(.*?)</\1>

暫無
暫無

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

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