[英]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().Serialize(Request.QueryString["UserName"]);
字符串的缩写形式是:
var UserName = "@System.Web.HttpUtility.JavaScriptStringEncode(Request.QueryString["UserName"])";
或将结果用双引号引起来的重载版本:
var UserName = @System.Web.HttpUtility.JavaScriptStringEncode(Request.QueryString["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.