我有一个MVC视图,我必须将一个字符串变量传递给JavaScript,但该字符串变量中有单引号('
)。我想做这样的事情
<a onclick="JavaScript:AddressHandler.ProcessAddress('<%= homeAddress %>');"
class="button-link">change</a>
homeAddress有单引号,我必须以某种方式解决方法,以便我可以将它的完整值传递给JavaScript。
要将字符串转义为Javascript字符串文字,请使用双反斜杠替换反斜杠,并使用反斜杠和分隔符替换字符串分隔符:
<a onclick="AddressHandler.ProcessAddress('<%= homeAddress.Replace(@"\", @"\\").Replace("'", @"\'") %>');" class="button-link">change</a>
注意:将脚本放入URL而不是事件处理程序时,将使用javascript:
协议。
编辑: 如果脚本还包含需要HTML编码的字符,则应在转义Javascript字符串后执行此操作:
<a onclick="<%= Html.Encode("AddressHandler.ProcessAddress('" + homeAddress.Replace(@"\", @"\\").Replace("'", @"\'") +"');") %>" class="button-link">change</a>
因此,如果您不知道字符串包含什么,为了安全起见,您需要首先转义字符串文字,然后对代码进行HTML编码,以便将其放入HTML标记的属性中。
您可以使用Ajax帮助程序:Ajax.JavaScriptStringEncode(string strToEncode)
你可以编写一个方法,用反斜杠转义所有单引号(和其他字符,如果需要),这样它就不会被javascript误解。
您需要将homeAddress编码为URL。 MVC有一个内置的帮助器来做到这一点:UrlHelper.Encode(string url) - 它应该用%27
替换单引号
我没时间测试它,但看看HtmlHelper.Encode(string s)。它可能会为你逃避。