[英]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">>
另一個問題是上面的表達式使用了非捕獲組,除了匹配在組1中這一事實之外沒什么問題。我不太確定如何僅在組1上進行替換並保留其余的組。比賽。 似乎MatchEvaluator並沒有真正做到這一點,或者我現在無法想象它。
我懷疑我的正則表達式可以用一些愛。
有人有什么好主意嗎?
你為什么要這樣做? >做什么有害? 我遇到的大多數解析器都非常滿意,而不需要將其轉義為實體。
另外,在將內容字符串與包含HTML標記的字符串連接之前,使用HtmlUtilty.HtmlEncode對內容字符串進行正確編碼會更合適,因此,如果這是在您的控制之下,您應該考慮在那里處理它。
訣竅是捕獲不是目標的所有內容,然后將其與更改的文本一起重新插入,如下所示:
Regex.Replace(str, @"\G((?>[^<>]+|<[^>]*>)*)>", "$1>");
但安東尼是對的:文本節點中的右尖括號不應該引起任何問題。 將HTML與正則表達式匹配是棘手的; 例如,注釋和CDATA幾乎可以包含任何內容,因此強大的正則表達式必須具體匹配它們。
也許將您的HTML讀入XML解析器,該解析器應該為您完成轉換。
您是在談論HTML標記內的>字符(如Java的innerText中),還是HTML標記的參數列表?
如果您只想清理開始和結束標記之間的文本,那應該相當簡單。 只需找到任何> char,並將其替換為&gt ;. (我也會用&lt標簽來做),但是HTML渲染引擎應該為你照顧這個......
舉一個你想要消毒的例子,也許我們找到最好的解決方案。
拉里
您是否可以將字符串讀入XML文檔並查看值並將>
替換為>
在價值觀中。 這將需要遞歸進入文檔中的每個節點,但這不應該太難。
Steve_C,你可以試試這個RegEx。 這將捕獲引用1中的任何HTML標記,並且標記之間的文本存儲在捕獲2中。我沒有完全測試它,只是將其丟棄,以防它可能有所幫助。
<([A-Z][A-Z0-9]*)[^>]*>(.*?)</\1>
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.