【发布时间】:2010-04-12 14:09:44
【问题描述】:
我有一个 javascript 文件,很多人都将它嵌入到他们的页面中。由于我托管该文件,因此我可以控制该 javascript 文件;我无法控制它的嵌入方式,因为很多人已经在使用它了。
这个 javascript 文件向我的 servlet 发送 GET 请求,并且随请求传递的参数被记录到 DB。例如,javascript 向http://myserver.com/servlet?p1=123&p2=aString 发送请求,然后servlet 以某种方式将123 和aString 记录到DB。
在发送字符串之前,我使用encodeURIComponent() 对其进行编码。但我发现每个客户端都会根据浏览器或访问的站点发送具有不同编码的相同字符串。结果,相同的字符串在到达 servlet 时用不同的字符表示(因此它们是不同的字符串)。
我要做的是将字符串从 javascript 转换为一种编码,这样当它们到达客户端时,相同的单词会用相同的字符表示。
这怎么可能?
PS。如果有办法从 Java 转换编码,它也是适用的。
编辑:更准确地说,我从页面中选择了一些单词并将其发送到服务器。这就是编码导致问题的地方。
编辑 2: 我没有通过 XMLHttpRequest 发送(也无法发送)GET 请求,因为域不同。我正在使用将script 标签添加到@streetpc 提到的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'));
}
【问题讨论】:
标签: java javascript unicode encoding utf-8