从文件名路径中的撇号代码替换特殊字符

时间:2014-01-29 18:40:22

标签: c# javascript .net silverlight

我遇到的问题是关于在服务器上生成的文件,.NET代码正在调用Javascript方法将文件下载到客户端,但如果文件名有撇号,则会失败(')。

例如:

如果ExportExcelFileName = "C:\HereIsMyFile.xls"它工作正常。 但是,如果  ExportExcelFileName = "C:\Here'sMyFile.xls"

它会导致无法评估异常。

我尝试添加[.Replace("'", "\\'")][.Replace("'", "%27")],但没有运气......

string script = string.Format("DownLoadFile('{0}')", e.Result.ExportExcelFileName).Replace('\\', '/');
HtmlPage.Window.Eval(script);

3 个答案:

答案 0 :(得分:1)

我明白了:

当我尝试这个时:

string script = string.Format("DownLoadFile('{0}')", e.Result.ExportExcelFileName).Replace('\\', '/').Replace("'", "\\'");
HtmlPage.Window.Eval(script);

它还替换了DownloadFile('{0}')的javascript命令中的单引号。

所以我先简单地做了替换:

var escapedFileName = ((e.Result.ExportExcelFileName).Replace('\\', '/')).Replace("'", "\\'");
string script = string.Format("DownLoadFile('{0}')", escapedFileName);
HtmlPage.Window.Eval(script);

答案 1 :(得分:0)

像这样的简单方法会起作用吗?

private static string quoteReplace(string psString)
{
    return psString.Replace("'", "");
}

答案 2 :(得分:0)

尝试使用URI转义作为文件名:

Uri.EscapeDataString(filePathHere);。请参阅Uri.EscapeDataString on MSDN

另见:If filename has single quote C# javascript does not get executed