c#替换字符串函数不返回预期结果

时间:2011-02-22 10:15:27

标签: c# string

string message = CommonFunctions.SanitiseInput(context.Request.QueryString["msg"]);

该功能定义为:

// Sanitise input
public static string SanitiseInput(string inputText)
{
    string cleanedString = inputText;

    cleanedString.Replace("<","&lt;");      // No code
    cleanedString.Replace(">", "&gt;");
    cleanedString.Replace("&", "&amp;");    // No query string breaks

    return cleanedString;
}

如果输入"<b>rg</b>",则返回相同的内容,而不是"&lt;b&gt;rg&lt;/b&gt;"

3 个答案:

答案 0 :(得分:7)

C#中的Replace函数不会修改字符串本身 - 它会返回字符串的修改版本。

试试这个:

public static string SanitiseInput(string inputText)
{
    string cleanedString = inputText;

    cleanedString = cleanedString.Replace("<","&lt;");      // No code
    cleanedString = cleanedString.Replace(">", "&gt;");
    cleanedString = cleanedString.Replace("&", "&amp;");    // No query string breaks

    return cleanedString;
}

对于"<b>rg</b>",这会给你"&amp;lt;b&amp;gt;rg&amp;lt;/b&amp;gt;"。要将不必要的转化修复为"&amp;",请将第三个替换转移到其他两个之前,这将为您提供您期望的结果。

答案 1 :(得分:3)

答案 2 :(得分:1)

我认为你需要使用cleanedString = cleanedString.Replace("<","&lt;");等。