私はMicrosoftスタック(つまりWPF)からHTML5に移行しているので、この質問のかなりアマチュア的な性質について事前に謝罪します。
当面のトピックは、HTMLのエンコードとデコードです。
HTTP経由でC#バックエンドにAJAX呼び出しを行うHTML5アプリについて考えてみます。サーバーはJSON形式のデータを排他的に返し、常にを使用してJSON値フィールドをHTMLエンコードするようにしますHttpUtility.HTMLEncode()
。
HTML5クライアントは、同じプロセスを逆に実行します。サーバーに投稿されたすべてのデータは、最初に単純なJavaScriptヘルパー関数を使用してHTMLでデコードされます。
HTML5アプリで表示される可能性のあるすべての文字列データは、HTMLエンコードされた形式で保存され、場所から場所へと渡されます。このスキームは私にとってうまく機能しています。しかし、今日、私はHTML5テキストボックスを発見しました。そうすることで、何か奇妙なことに気づきました。テキストボックスは、エンコードされたテキストを好まないようです。
そのように定義されたテキストボックスがある場合:
<input id="festus" type="text"/>
次のように更新します。
$("#festus").val(someEncodedString)
…テキストボックスには、コードを適切な文字に変換する代わりに、someEncodedStringに埋め込まれている実際のコードが表示されます。ブラウザがすべてのDOM要素に対して適切なエスケープコードの解釈を実行すると想定したため、この動作に驚きました。
val2()と呼ばれるval()のヘルパー/ラッパーを作成して、問題を抽象化しようとしました。
$.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入門」タイプの本では、このトピックについて詳しく説明していません。