/** * 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));