与文本框有关的HTML编码/解码

Cha*_*ker 0 javascript jquery html5 encoding textbox

我正在从Microsoft堆栈(即WPF)过渡到HTML5,因此对于这个问题的非专业性质,我们会提前道歉。

当前的主题是HTML编码和解码。

考虑一个HTML5应用程序,它通过HTTP对C#后端进行AJAX调用。服务器以独占方式返回JSON格式的数据,始终确保使用来对JSON值字段进行HTML编码HttpUtility.HTMLEncode()

HTML5客户端反向执行相同的过程。首先,使用简单的JavaScript帮助程序功能将所有发布到服务器的数据进行HTML解码。

HTML5应用程序中所有可能显示的字符串数据都以HTML编码形式存储并从一个地方传递到另一个地方。这个方案对我来说效果很好。但是今天,我发现了HTML5文本框,并发现了一些奇怪的地方。文本框似乎不喜欢编码文本。

如果我有这样定义的文本框:

<input id="festus" type="text"/>
Run Code Online (Sandbox Code Playgroud)

并进行如下更新:

$("#festus").val(someEncodedString)
Run Code Online (Sandbox Code Playgroud)

…文本框显示嵌入到someEncodedString中的实际代码,而不是将这些代码转换为适当的字符。我为浏览器对所有DOM元素执行正确的转义码解释而感到惊讶。

我试图通过为val()编写一个名为val2()的辅助程序/包装程序来解决问题:

$.prototype.val2=function(newVal){
    return (newVal===undefined)
        ?iHub.Utils.encodeHTML(this.val())      //getting value
        :this.val(iHub.Utils.decodeHTML(newVal));   //setting value
}
Run Code Online (Sandbox Code Playgroud)

[iHub.Utils是我编写的辅助函数库]

这里的想法是val2()将在获取值时对从我的文本框中检索的数据进行适当的编码,并在设置值之前对其进行解码。这似乎可行,但我无法撼动这种感觉,即我必须对HTML5中编码/解码应如何工作产生基本的误解。

使用文本框时是否对数据进行编码/解码是标准做法?文本框在某种程度上是否特别,与其他常见元素(例如<p>和)不同<select>,在显示编码的输入字符串时不执行标准解码?

再次,抱歉,如果这太基础了。HTML5和JavaScript对我来说还很陌生,而我的“ HTML5简介”类型的书并未真正深入讨论此主题。

JW.*_*JW. 5

HTML编码用于HTML文档。如果您将自己的值包括在HTML文档本身中,例如<input value="10 &gt; 5" />您将对其进行编码,以确保>值中的内容不会与>用于关闭标签的混淆。

但是,当您使用JavaScript设置字段的值时,就不会有混淆的余地。您不是要修改标签<input.../>;您正在修改JavaScript对象。因此,您不应该对该值进行HTML编码。如果您使用的是字符串变量,例如您的示例,则根本不需要进行任何编码。

另一方面,如果您使用字符串文字来指定值,则需要将其编码为JavaScript字符串,例如,通过转义'in $("#festus").val('can\'t')。这与您进行HTML编码的原因完全相同;避免与'关闭字符串的混淆。

使用JavaScript生成HTML代码的唯一时间是使用JavaScript进行HTML编码,例如el.innerHTML = '<input value="10 &gt; 5" />';

因此,我建议您不要在AJAX响应或请求中对字符串进行HTML编码。相反,请避免编码,直到您实际生成需要编码的那种代码为止。因此,在编写HTML时仅使用HTML编码字符串,在编写JavaScript时仅使用JavaScript编码字符串,依此类推。