什么是在HTML元素上编码onClick属性值的正确方法?

问题描述:

我有一个看起来像这样一个ASP .NET页面上的HTML元素:什么是在HTML元素上编码onClick属性值的正确方法?

<input type="button" onclick="<%=GetOnClick(param1) %>" /> 

的GetOnClick功能如下:

Function GetOnClick(param1 As String) As String 

    Dim onClick As String 

    onClick = "foo(" & JavaScriptEncode(param1) & ");" 

    Return HtmlAttributeEncode(onClick) 

End Function 

我想我需要JavaScriptEncode(作为字符串 - 此方法添加单引号)param1变量,然后HtmlAttributeEncode整个事情,因为我将它设置onClick属性。我相信我可以避免在90%的情况下没有完全编码,但这是最佳做法吗?

编辑:

布赖恩提出了一个很好的点。如果你可以控制字符串param1包含,你不需要编码它。但是,在这种情况下,它是用户输入,所以我需要非常小心。

答案取决于一些我们不知道的事情...... param1从哪里来? foo()期待什么?

如果您正在控制后端包含的param1,您甚至不需要JavaScriptEncode。如果它源自某些用户输入,那么当然你需要清理它或对它进行编码。但是你不需要编码两次。

+0

它是用户输入。我编辑了这个问题来反映这个变化。 – 2011-07-19 13:00:53