我有一个JavaScript文件,很多人都嵌入到他们的页面。由于我托管该文件,因此我可以控制该JavaScript文件;我无法控制它的嵌入方式,因为很多人已经在使用它。如何使用JavaScript中的相同编码发送参数?
这个JavaScript文件发送GET请求我的servlet和与请求传递的参数被记录到数据库。例如,javascript向http://myserver.com/servlet?p1=123&p2=aString
发送请求,然后servlet以某种方式将123
和aString
记录到DB。
之前发送的字符串我用encodeURIComponent()
来编码。但是我发现每个客户都使用不同的编码发送相同的字符串,具体取决于他们的浏览器或他们正在访问的网站。结果,相同的字符串在到达servlet时用不同的字符表示(所以它们是不同的字符串)。
我所试图做的是字符串从JavaScript转换为一种编码的,所以当他们到达客户端同样的话用相同的字符表示。
这怎么可能?
PS。如果有办法从Java转换编码,它也适用。
编辑:更确切地说,我从页面中选择一些单词并将其发送到服务器。这是编码导致问题的地方。
编辑2:我不发送(并且不能发送)通过XMLHttpRequest
的GET请求,因为域是不同的。我正在使用@streetpc提到的将script
标记添加到head
方法。
编辑3:在我消毒通过JavaScript端取代非ASCII字符的字符串的时刻,但我有一种感觉,这是不是要走的路:
function sanitize(word) {
/*
ğ : \u011f
ü : \u00fc
ş : \u015f
ö : \u00f6
ç : \u00e7
ı : \u0131
û : \u00fb
*/
return encodeURIComponent(
word.replace(/\u011f/g, '_g')
.replace(/\u00fc/g, '_u')
.replace(/\u00fb/g, '_u')
.replace(/\u015f/g, '_s')
.replace(/\u00f6/g, '_o')
.replace(/\u00e7/g, '_c')
.replace(/\u0131/g, '_i'));
}
我正在使用非ASCII字符,这就是为什么我遇到问题。 – nimcap 2010-04-12 14:30:28
您在返回的'.js'中使用文字,原始非ASCII字符?如果是这样,您将需要对它们进行编码,以便它们仅适用于ASCII。对于字符串文字来说,这很容易,如上所述。 (我想不出你需要字符串以外的非ASCII字符的原因。) – bobince 2010-04-12 14:32:02
我更新了我的问题,使其更加清晰,我使用非ASCII字符但不直接在JS中。我从页面中获取它们,通常包含非ASCII字符。 – nimcap 2010-04-12 14:50:03