我有一个字符串,用于发送到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。
谢谢。
答案 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));