У меня есть файл javascript, который многие люди встроили в свои страницы. Поскольку я размещаю файл, у меня есть контроль над этим файлом javascript; Я не могу контролировать способ его встраивания, потому что многие его уже используют.
Этот файл javascript отправляет запросы GET моим сервлетам, а параметры, переданные с запросом, записываются в БД. Например, javascript отправляет запрос в http://myserver.com/servlet?p1=123&p2=aString
, а затем в сервлет записывает записи 123
и aString
в БД.
Перед отправкой строк я использую encodeURIComponent()
для кодирования. Но я понял, что каждый клиент отправляет одну и ту же строку с разными кодировками, в зависимости от того, какой браузер или какой сайт он посещает. В результате одни и те же строки представляются разными символами, когда он достигает сервлета (поэтому они являются разными строками).
То, что я пытаюсь сделать, - это преобразовать строки в один вид кодирования из javascript, чтобы при достижении клиентом одинаковые слова представлялись одинаковыми символами.
Как это возможно?
PS. Если есть способ преобразовать кодировку из Java, это также применимо.
Редактировать: Если быть более точным, я выбираю несколько слов со страницы и отправляю их на сервер. Именно здесь кодирование вызывает проблемы.
Редактировать 2: Я НЕ отправляю (и не могу отправлять) запросы GET через XMLHttpRequest
, потому что домены разные. Я использую добавление тега script
к head
методу, упомянутому @streetpc.
Редактировать 3: В данный момент я очищаю строки, заменяя не-ASCII символы на стороне javascript, но у меня есть ощущение, что это не тот путь:
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'));
}