检测并转义所有特殊字符

时间:2013-06-14 13:20:29

标签: c# javascript

我有一个字符串,用于发送到mailto。

我想找到所有特殊字符,然后逃避它们,使我的mailto工作正常,而不必选择写特殊字符。

例如,如果我的字符串包含#,则mailto的正文将在它之前停止。

String strCmd = String.Format("window.open(\"mailto:{0}?subject={1}&body={2}\");",
                    toEmail, subject, body);

如果我的弦体如下:

body = "This is a string to test c# code with a mailto";

然后mailto将包含This is a string to test c

如何解决这个问题,获取This is a string to test c# code with a mailto

如果有,也必须制作backLine。

谢谢。

1 个答案:

答案 0 :(得分:4)

这实际上不是关于转义特殊字符,而是将字符串编码为有效的URL,而不是javascript调用window.open。在使用网址时,即使是“普通”字符(例如<,>)也会被视为特殊字符。

幸运的是,.NET已经可以将字符串编码为HttpUtility.UrlEncode的URL。此调用将替换特殊字符,如<和>使用其URL编码值%3c和%3e。

您应该注意只编码传递给String.Format的参数,而不是整个格式化的字符串,因为UrlEncode将编码整个字符串,包括?和&字符:

String strCmd = String.Format("window.open(\"mailto:{0}?subject={1}&body={2}\");",
                HttpUtility.UrlEncode(toEmail), 
                HttpUtility.UrlEncode(subject), 
                HttpUtility.UrlEncode(body));