问题描述
|
我在下面编写了替换字符串的代码,但似乎代码有问题。它不能多次替换。它只能代替第一次出现。它假定替换所有出现的事件。
//不要使用System.Security.SecurityElement.Escape。我正在为多个.NET版本编写此代码。
public string UnescapeXML(string s)
{
if (string.IsNullOrEmpty(s)) return s;
return s.Replace(\"&\",\"&\").Replace(\"'\",\"\'\").Replace(\""\",\"\\\"\").Replace(\">\",\">\").Replace(\"<\",\"<\");
}
protected void Page_Load(object sender,EventArgs e)
{
string TestData=\"TestData&amp;amp;\";
Response.Write(\"using function====>>>>\" + UnescapeXML(TestData));
Response.Write(\"\\n\\n<BR>Not using function====>>>>\" + TestData.Replace(\"&\",\"\"));
}
解决方法
假设您想要单通道(每个子字符串)解决方案,您的函数将正常运行。
您的testDate在
amp;
之前缺少&
个字符
改成:
string TestData=\"TestData&&&\";
从:
string TestData=\"TestData&amp;amp;\";
什么是单遍(每个子字符串)解决方案?
每个唯一的substring1出现都被更改。
然后,更改每个唯一的substring2出现。
...
然后,改变每个唯一的子串N的出现。
递归替代
递归解决方案将涉及以下内容:
替换单个子字符串后,您再次调用该函数
如果没有替换,返回字符串
public string ReplaceStuff(string MyStr) {
//Attempt to replace 1 substring
if ( ReplacementOccurred ){
return ReplaceStuff(ModifiedString);
}else{
return MyStr;
}
}
递归有什么用?
好,给定一个输入字符串:&amp;
,它将首先更改为&
,然后进行下一级别的递归将其更改为&
。
老实说,我不认为作者需要递归解决方案,但我可以看到路人可能会如何。
, 看起来HttpUtility类将是这种情况下的最佳选择。