Reputation: 145
I wrote the code below to replace strings but it seemed like there is something wrong with the code. It couldn't replace multiple times. It only can replace the first occurrence. It suppose to replace all occurrences.
//Do not use System.Security.SecurityElement.Escape. I am writing this code for multiple .NET versions.
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("&", ""));
}
Upvotes: 1
Views: 1362
Reputation: 30855
Your function is operating correctly, assuming you want a one-pass (per substring) solution.
Your testDate is missing &
characters before amp;
Change to:
string TestData="TestData&&&";
From:
string TestData="TestData&amp;amp;";
What is a one-pass (per substring) solution?
Recursive Alternative
A recursive solution would involve the following:
After one-single substring replacement, you call the function again
If no replacements occured, return the string
public string ReplaceStuff(string MyStr) {
//Attempt to replace 1 substring
if ( ReplacementOccurred ){
return ReplaceStuff(ModifiedString);
}else{
return MyStr;
}
}
What do you get with Recursion?
&amp;
, it would first be changed to &
, then the next level of recursion would change it to &
.Upvotes: 5
Reputation: 22448
Looks like the HttpUtility class will be the best choise in that case.
Upvotes: 1