次を使用して、URL経由でオブジェクトを渡しています。
encodeURIComponent(JSON.stringify(myObject))
「ä」はローカル サーバーで「%C3%A4」としてエンコードされます。残念ながら、ウェブサーバーでは「a%CC%88」としてエンコードされています。
これは、誤ってエンコードされたときに見つからないデータベース フィールドの名前の一部であるため、アプリが壊れます。また、アプリではユーザーが自分のデータをアップロードできるため、フィールド名に ä がないことを制御できません。
「ä」が常に正しくエンコードされていることを確認するにはどうすればよいですか?
ごめん。これを明確にするために: エンコーディングは、ブラウザのクライアント側で両方とも行われます。ただし、Web アプリが Web サーバーから提供される場合、「ä」は「a%CC%88」ではなく「%C3%A4」としてエンコードされます (同じ chrome ブラウザーで両方をテストしました)。
ご助力いただきありがとうございます。より深く掘り下げることができました:
イベントで実行されるコードがあります。チェックボックスをループし、フィールド名を含むオブジェクトの配列を作成します。このコードは、チェックボックスの「feld」という名前の属性からフィールド名を取得します。
<div class="checkbox">
<label>
<input class="feld_waehlen" type="checkbox" dstyp="Taxonomie" datensammlung="SISF Index 2 (2005)" feld="Artname vollständig">Artname vollständig
</label>
</div>
このコードの実行:
console.log("this.getAttribute('feld') = " + this.getAttribute('feld'));
$(this).attr('feld') = Artname vollständig
ループ中に実行する場合:
console.log('encodeURIComponent("Artname vollständig") = ' + encodeURIComponent("Artname vollständig"));
答えは正しいです: encodeURIComponent("Artname vollständig") = Artname%20vollst%C3%A4ndig
しかし、私が実行した場合:
console.log("encodeURIComponent(this.getAttribute('feld')) = " + encodeURIComponent(this.getAttribute('feld')));
答えは: encodeURIComponent(this.getAttribute('feld')) = Artname%20vollsta%CC%88ndig
これはすべてブラウザで行われます。ただし、問題が発生するのは、Web アプリが Web サーバー (cloudant.com で実行されているカウチアプリ) から提供されている場合のみです。
メソッド「getAttribute」が異なるエンコーディングを返すのはどうしてでしょうか?