我正在从Microsoft堆栈(即WPF)转换到HTML5,因此事先对这个问题的相当业余性质表示道歉。因为它与文本框有关的HTML编码/解码
手头的主题是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是我写的辅助函数库]
这里的想法是,值2()将相应地进行编码时越来越值从我的文本框检索到的数据,在此之前设置值解码。这似乎工作,但我不能动摇的感觉,我必须有一个根本的错误理解如何编码/解码应该在HTML5中工作。
在使用文本框时编码/解码数据是标准做法吗?文本框在某种程度上是特别的,只要它们不像其他常见元素(如<p>
和<select>
)在显示编码输入字符串时不执行标准解码?
再一次,对不起,如果这太基本了。对我而言,HTML5和JavaScript是相当新的,我的“HTML5入门”类型的书籍并没有深入讨论这个话题。
您的文本框的值将显示您告诉它的任何原始文本。例如,如果你想要在'div'中解释你的HTML,你可以使用'$(“#target_id”)。html(“粗体文本”);'。标准的文本框并不真正把HTML放在里面,所以我不清楚你想要实现什么。 – Marc 2012-04-21 18:40:29
结帐this [fiddle](http://jsfiddle.net/MTWDU/)...这是你想要做的吗? – 2012-04-21 18:45:35
文本框显示原始文本。他们不显示呈现的HTML。这与Ajax,Json或其他任何东西无关。浏览器只显示你放入的任何文本。这是一个标准的浏览器的东西。目前还不清楚你到底想要什么。你能给出一个数据的例子,你想如何显示? – 2012-04-21 19:02:08