繁体   English   中英

JavaScript因查询字符串中的特殊字符而崩溃

[英]Javascript crashes on special characters from query string

要在TypeScript使用此值,请从查询字符串中获取该值,如下所示:

var UserName = @Request.QueryString["UserName"];

但是我收到了一个Unexpeted Identifier error ,因为如果在DevTool如果我转到中断的地方,则查询字符串的值是这样的:

var UserName = ANT-ANT 37690 /第三方

那么,有没有办法对它进行某种卫生处理,以免崩溃? 我猜JS值中有非法字符吗?

该错误与“特殊”字符无关,而是与赋值的右侧(用引号引起来的)包含js引擎视为未知标识符的事实有关。

正确格式化成为javascript代码一部分的数据的一种方法是使用System.Web.Script.Serialization命名空间中的JavaScriptSerializer类。

var UserName = @new System.Web.Script.Serialization.JavaScriptSerializer().Seria‌​lize(Request.Query‌​St‌​ring["UserName"]);

字符串的缩写形式是:

var UserName = "@System.Web.HttpUtility.JavaScriptStringEncode(Request.Query‌​St‌​ring["UserName"])";

或将结果用双引号引起来的重载版本:

var UserName = @System.Web.HttpUtility.JavaScriptStringEncode(Request.Query‌​St‌​ring["UserName"], true);

您需要在值中包含引号。

var UserName = "@(Request.QueryString["UserName"])";

否则,该名称将逐字出现在您的代码中,并引起您所看到的问题。

此处无需采取防御措施,因为用户可以随时使用用户脚本来更改页面,因为他们可以使用他们认为合适的页面,并且他们输入QueryString并在这种情况下仅将其视为结果。

如果需要清理用户输入,则应在实际到达服务器端视图之前进行。 但是,如果通常仍然担心在这种情况下将输出清理到视图中,则最好包含来自razor库的编码。

var sanitizedJsVariable = "@System.Web.HttpUtility.JavaScriptStringEncode(model.VariableFromServer)";

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM