我通过 url 传递一个对象,使用:
encodeURIComponent(JSON.stringify(myObject))
“ä”在我的本地服务器上被编码为“%C3%A4”。不幸的是,它在网络服务器上被编码为“a%CC%88”。
这会破坏我的应用程序,因为它是错误编码时找不到的数据库字段名称的一部分。而且我无法控制字段名称中没有ä,因为该应用程序允许用户上传自己的数据。
如何确保始终正确编码“ä”?
对不起。为了明确这一点:编码发生在浏览器中的客户端两次。但是当从网络服务器提供网络应用程序时,“ä”被编码为“%C3%A4”而不是“a%CC%88”(我已经在同一个 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%20volst%C3%A4ndig
但是如果我运行:
console.log("encodeURIComponent(this.getAttribute('feld')) = " + encodeURIComponent(this.getAttribute('feld')));
答案是:encodeURIComponent(this.getAttribute('feld')) = Artname%20vollsta%CC%88ndig
这一切都发生在浏览器中。但问题仅在从网络服务器(在 cloudant.com 上运行的沙发应用程序)提供网络应用程序时出现。
方法“getAttribute”如何返回不同的编码?