为什么从查询字符串中删除反斜杠 - ASP.NET&使用Javascript

时间:2009-05-04 21:36:45

标签: c# asp.net javascript

我正在尝试生成一个包含UNC路径作为查询字符串变量之一的URL。当用户单击ASP.NET按钮控件时,URL将在弹出窗口中打开。单击该按钮时,将从UNC路径中删除向后斜杠,从而导致页面中断。

该按钮在页面源文件中正确呈现所有反斜杠。

有没有办法阻止这种情况?

这是我的源代码:

代码背后:

string unc = @"\\myserver\myfolder\myfile.txt";
string url = string.Format("http://www.mysite.com/page.aspx?a={0}", unc);

MyButton.Attributes.Add("onclick", @"javascript:FullPop('" + url + @"')");

ASPX页面

<script language="javascript" type="text\javascript">
    function FullPop(Newurl) {
        Win = window.open( Newurl,"Monitor", "fullscreen=0,toolbar=1,location=1,directories=1,status=1,menubar=1,scrollbars=1,resizable=1,width=800,height=600,top=50,left=50");
        Win.focus();
    }
</script>

<asp:button id="MyButton" runat="server" cssclass="mycss" text="View Actual Target" />

更新

Server.UrlEncode不起作用。同样的行为。

更新1

根据Daniel Lew的回答,我开发了以下解决方案:

protected void Page_Load(object sender, EventArgs e)
{  
    string unc = @"\\myserver\myfolder\myfile.txt";
    string url = string.Format("http://www.mysite.com/page.aspx?a={0}", unc);

    MyButton.Attributes.Add("onclick", @"javascript:FullPop('" + this.EscapeforJavaScript(url) + @"')");
}

private string EscapeforJavaScript(string url)
{
    return url.Replace(@"\", @"\\"); 
}

3 个答案:

答案 0 :(得分:4)

您必须对您在网址中输入的值进行网址编码:

string url = "http://www.mysite.com/page.aspx?a=" + Server.UrlEncode(unc);

编辑:
要安全地将URL放在Javascript代码中,您还必须将字符串编码为文字字符串:

MyButton.Attributes.Add("onclick", @"FullPop('" + url.Replace(@"\", @"\\").Replace("'", @"\'") + @"')");

(javascript:协议仅在将Javascript用作链接的href时使用,而不是在将代码放入onclick等事件时使用。)

答案 1 :(得分:1)

我对asp.net一无所知,但是在通过模板化之前将文本直接添加到JavaScript中时,我遇到了一些问题。您是否尝试转义网址上的反斜杠,以避免这种情况?

// Returns "\myservermyfoldermyfile.txt", due to escpaing the backslash.
alert("\\myserver\myfolder\myfile.txt");

// Returns correct value of "\\myserver\myfolder\myfile.txt"
alert("\\\\myserver\\myfolder\\myfile.txt");

答案 2 :(得分:0)

您可能希望尝试使用以下方法对服务器端的字符串进行URLE编码:

public static string UrlFullEncode(string strUrl) 
{
    if (strUrl == null)
        return "";
    strUrl = System.Web.HttpUtility.UrlEncode(strUrl);
}

我不是百分之百确定它是否会取代反斜杠,但值得一试。