转义和反转义无效字符

4

这应该很容易。我有一个字符串,像下面这样进行转义:

string originalString = "M&M";
string escapedString = System.Security.SecurityElement.Escape(originalString);//M&M

迄今为止还不错

string unEscapedString = System.Security.SecurityElement.FromString(escapedString).Text;

期望回到 M&M 但收到 "对象未设置" 的错误消息。

假设字符串应该采用 XML 格式,因此在这种情况下需要什么帮助。


System.Security.SecurityElement.FromString() 不会返回一个 string,你把它的结果赋值给了一个 string,这是打错了吗? - cliesens
是的,我本意是在末尾加上“.Text”。感谢你的发现。 - Maxqueue
FromString 方法需要 XML 格式的字符串作为输入;例如 string unEscapedString = System.Security.SecurityElement.FromString($"<elementName>{escapedString}</elementName>"); - quaabaam
他们有一个转义函数可以接受任何字符串,但没有相反的功能,这似乎有点奇怪。 - Maxqueue
FromString 的作用是从 XML 字符串中获取 SecurityElement 对象,而不是将值解码为字符串。因此,在 'SecurityElement' 对象中技术上没有 _decode_。有一个辅助方法来编码值是有意义的,但是没有解码它,因为您希望 SecurityElement 对象能够正常工作。 - quaabaam
@Maxqueue 顺便说一句:你可能整个做错了什么...比如用字符串拼接构建XML...你可能需要停下来想一想是否有更好的方法来实现你真正需要的东西... - Alexei Levenkov
1个回答

7
你可以使用 System.Net.WebUtility 类的静态 HtmlDecode 方法来实现此功能:
string original = "M&M";
string escaped = System.Security.SecurityElement.Escape(original);
string unescaped = System.Net.WebUtility.HtmlDecode(escaped);

由于FromString方法期望有效的xml,因此代码无法按照您的方式工作。请参阅此处的文档:

参数
xmlString
要创建安全元素的XML编码字符串。

如果在字符串周围添加xml标签,则可以使您的代码示例工作:
string unescaped = SecurityElement.FromString($"<x>{escaped}</x>").Text;

是的,这个方法可行,我已经知道可以这样做,但不明白为什么System.Security.SecurityElement有Escape而没有相反的功能? - Maxqueue
1
因为FromString期望有效的xml。我已经更新了回答,并提供了一个对你有用的示例。 - Rufus L
是的,谢谢你,这似乎是我最好的解决方案。 - Maxqueue

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接