【发布时间】:2012-04-21 18:07:15
【问题描述】:
我正在从 Microsoft 堆栈(即 WPF)过渡到 HTML5,因此提前为这个问题相当业余的性质道歉。
手头的主题是 HTML 编码和解码。
假设一个 HTML5 应用通过 HTTP 对 C# 后端进行 AJAX 调用。服务器仅返回 JSON 格式的数据,始终确保使用 HttpUtility.HTMLEncode() 对 JSON 值字段进行 HTML 编码。
HTML5 客户端反向执行相同的过程。发布到服务器的所有数据首先使用简单的 JavaScript 辅助函数进行 HTML 解码。
我的 HTML5 应用程序中所有可能显示的字符串数据都以 HTML 编码的形式存储和传递。这个方案对我来说效果很好。但是今天我发现了 HTML5 文本框,并在这样做的过程中发现了一些奇怪的东西。文本框似乎不喜欢编码文本。
如果我有一个这样定义的文本框:
<input id="festus" type="text"/>
并更新如下:
$("#festus").val(someEncodedString)
...文本框显示嵌入到 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
}
[iHub.Utils 是我编写的辅助函数库]
这里的想法是 val2() 将在 获取 值时对从我的文本框中检索到的数据进行适当的编码,并在 设置 值之前对其进行解码。这似乎可行,但我无法摆脱我对 HTML5 中编码/解码应该如何工作的基本误解。
使用文本框时对数据进行编码/解码是标准做法吗?与<p> 和<select> 等其他常见元素不同,文本框是否特殊,在显示编码输入字符串时不执行标准解码?
再次,抱歉,如果这太基本了。 HTML5 和 JavaScript 对我来说相当新,我的“HTML5 简介”类书籍并没有真正深入讨论这个主题。
【问题讨论】:
-
您的文本框值将显示您告诉它的任何原始文本。但是,如果您希望在
div中解释您的 HTML,例如,您可以使用$("#target_id").html("<b>bold text</b>");。标准文本框并没有真正将 HTML 包含在里面,所以我不清楚你想要实现什么。 -
签出这个fiddle...这是你想做的吗?
-
文本框显示原始文本。它们不显示呈现的 HTML。这与 Ajax、Json 或其他任何东西无关。浏览器只会显示您放入其中的任何文本。这是标准的浏览器。目前尚不清楚您到底想要什么。您能否举例说明数据以及您希望它如何显示?
标签: javascript jquery html encoding textbox