我有以下功能:
Private Function XMLEncode(ByVal s As String) As String
Return s.Replace("&", "&").Replace("<", "<").Replace(">", ">").Replace("'", "'").Replace("""", """).Replace("AMP",amp)
End Function
但上面的字符串为"TYNE & WEAR"
并生成:
TYNE &amp; WEAR
我只想让它成为TYNE & WEAR
xml是使用StringBuilder构建的,这就是我现在所困扰的。我知道.net会为你解决这个问题。
答案 0 :(得分:1)
更新
Private Function XMLEncode(ByVal s As String) As String
s = Regex.Replace(s, "(?i)&", "&") ' unescape escaped ones
Return s.Replace("&", "&").Replace("<", "<").Replace(">", ">").Replace("'", "'").Replace("""", """)
End Function
您可以使用SecurityElement.Escape来代替自己拥有此功能(并重新发明轮子):
text = SecurityElement.Escape(s)
或HttpUtility.HtmlEncode(如果你在ASP.Net中)
text = HttpUtility.HtmlEncode(s)
此外,如果您可以切换到XmlTextWriter
而不是StringBuilder
,那么XmlTextWriter.WriteString()
将为您进行转义。
答案 1 :(得分:1)
由于您不想双重转义xml标记,请考虑使用不会双重转义xml的正则表达式替换。
' encode "&", but not "&", ">", "<", or """.'
s = Regex.Replace (s, "&(?!(?:amp|lt|gt|quot);)", "&", RegexOptions.IgnoreCase)
' encode other xml characters.'
Return s.Replace("<", "<").Replace(">", ">").Replace("'", "'").Replace("""", """).Replace("AMP",amp)