/**
* Correspondance Windows-1252 -> utf-8 des caractères 128 à 255.
* Chaque index contient le code utf-8 du 128ème caractère après lui.
*/
var COWARD_CHARS = [
'%E2%82%AC', '%C2%81', '%E2%80%9A', '%C6%92', '%E2%80%9E', '%E2%80%A6', '%E2%80%A0', '%E2%80%A1', '%CB%86', '%E2%80%B0', '%C5%A0', '%E2%80%B9', '%C5%92', '%C2%8D', '%C5%BD', '%C2%8F',
'%C2%90', '%E2%80%98', '%E2%80%99', '%E2%80%9C', '%E2%80%9D', '%E2%80%A2', '%E2%80%93', '%E2%80%94', '%CB%9C', '%E2%84%A2', '%C5%A1', '%E2%80%BA', '%C5%93', '%C2%9D', '%C5%BE', '%C5%B8',
'%C2%A0', '%C2%A1', '%C2%A2', '%C2%A3', '%C2%A4', '%C2%A5', '%C2%A6', '%C2%A7', '%C2%A8', '%C2%A9', '%C2%AA', '%C2%AB', '%C2%AC', '%C2%AD', '%C2%AE', '%C2%AF',
'%C2%B0', '%C2%B1', '%C2%B2', '%C2%B3', '%C2%B4', '%C2%B5', '%C2%B6', '%C2%B7', '%C2%B8', '%C2%B9', '%C2%BA', '%C2%BB', '%C2%BC', '%C2%BD', '%C2%BE', '%C2%BF',
'%C3%80', '%C3%81', '%C3%82', '%C3%83', '%C3%84', '%C3%85', '%C3%86', '%C3%87', '%C3%88', '%C3%89', '%C3%8A', '%C3%8B', '%C3%8C', '%C3%8D', '%C3%8E', '%C3%8F',
'%C3%90', '%C3%91', '%C3%92', '%C3%93', '%C3%94', '%C3%95', '%C3%96', '%C3%97', '%C3%98', '%C3%99', '%C3%9A', '%C3%9B', '%C3%9C', '%C3%9D', '%C3%9E', '%C3%9F',
'%C3%A0', '%C3%A1', '%C3%A2', '%C3%A3', '%C3%A4', '%C3%A5', '%C3%A6', '%C3%A7', '%C3%A8', '%C3%A9', '%C3%AA', '%C3%AB', '%C3%AC', '%C3%AD', '%C3%AE', '%C3%AF',
'%C3%B0', '%C3%B1', '%C3%B2', '%C3%B3', '%C3%B4', '%C3%B5', '%C3%B6', '%C3%B7', '%C3%B8', '%C3%B9', '%C3%BA', '%C3%BB', '%C3%BC', '%C3%BD', '%C3%BE', '%C3%BF'
];
/**
* Correspondance cp1252 -> iso-8859-1
* Chaque sous-array a des index contenant le code iso-8859-1 des index cp1252 marqués en commentaires.
*/
var EXTREMELY_COWARD_CHARS_SOLUTIONS = [
['%8A', '%8B', '%8C', '%8D', '%8E', '%8F'], // 138 .. 143
['%9A', '%9B', '%9C', '%9D', '%9E', '%9F'], // 154 .. 159
['%C9', '%CA', '%CB', '%CC', '%CD', '%CE', '%CF'], // 201 .. 207
['%D9', '%DA', '%DB', '%DC', '%DD', '%DE', '%DF'] // 217 .. 223
];
function escapeURIComponent(str) {
str = encodeURIComponent(str);
var i, pkmn, len, index, evolution;
for (i = 0; i < str.length; i++) {
if (str[i] == '%') { // un caractère spécial apparaît
if (str[i + 1] == 'E') { // le caractère prend 3 bits
len = 9; // %xx%xx%xx
}
else { // 2 bits
len = 6; // %xx%xx
}
pkmn = str.substr(i, len);
index = COWARD_CHARS.indexOf(pkmn);
if (index != -1) {
index += 128;
if ((index >= 138 && index <= 143)
|| (index >= 154 && index <= 159)
|| (index >= 201 && index <= 207)
|| (index >= 217 && index <= 223)) {
if (index <= 143) {
evolution = EXTREMELY_COWARD_CHARS_SOLUTIONS[0][index - 138];
}
else if (index <= 159) {
evolution = EXTREMELY_COWARD_CHARS_SOLUTIONS[1][index - 154];
}
else if (index <= 207) {
evolution = EXTREMELY_COWARD_CHARS_SOLUTIONS[2][index - 201];
}
else if (index <= 223) {
evolution = EXTREMELY_COWARD_CHARS_SOLUTIONS[3][index - 217];
}
else {
showError('EXTREMELY_COWARD_CHARS_SOLUTIONS not found');
}
}
else {
evolution = index.toString(16);
if (evolution.length == 1) {
evolution = '0' + evolution;
}
evolution = '%' + evolution;
}
str = str.substr(0, i) + evolution + str.substr(i + len);
}
}
}
return str;
}
// USAGE:
var xhr = new XMLHttpRequest();
xhr.open('POST', '/cgi-bin/jvforums/forums.cgi', true);
xhr.send('yournewmessage='+escapeURIComponent(geid('area').value));