Autor: Zuby +++++ Datum: 27. 08. 2026 22:27:09
JtS » Nejaka totalni mrdka
// Hybrid encoding: ISO-8859-2 for Czech + HTML entities for emoji
function encodeFormValue(value: string): string {
const normalized = value.replace(/\r?\n/g, '\r\n');
let encoded = '';
for (const char of normalized) {
const mappedByte = ISO_8859_2_CHAR_TO_BYTE[char];
if (mappedByte !== undefined) {
// ISO-8859-2 characters: mapped byte value
const byte = mappedByte;
encoded += `%${byte.toString(16).toUpperCase().padStart(2, '0')}`;
} else if (char.charCodeAt(0) < 0x80) {
// ASCII - unreserved chars pass through, others are percent-encoded
const code = char.charCodeAt(0);
if (
(code >= 0x30 && code <= 0x39) || // 0-9
(code >= 0x41 && code <= 0x5A) || // A-Z
(code >= 0x61 && code <= 0x7A) || // a-z
code === 0x20 || // space
code === 0x2A || // *
code === 0x2D || // -
code === 0x2E || // .
code === 0x5F // _
) {
encoded += char === ' ' ? '+' : char;
} else {
encoded += `%${code.toString(16).toUpperCase().padStart(2, '0')}`;
}
} else {
// Emoji/Unicode: use HTML numeric entity encoding (codepointvalue;)
const codePoint = char.codePointAt(0) ?? 0x3F;
// Convert to HTML entity then percent-encode it
const entity = `${codePoint};`;
for (const entityChar of entity) {
const entityCode = entityChar.charCodeAt(0);
encoded += `%${entityCode.toString(16).toUpperCase().padStart(2, '0')}`;
}
}
}
return encoded;
}
const ISO_8859_2_CHAR_TO_BYTE: Record<string, number> = {
'Á': 0xC1,
'Â': 0xC2,
'Ă': 0xC3,
'Ä': 0xC4,
'Ĺ': 0xA5,
'Ć': 0xC6,
'Ç': 0xC7,
'Č': 0xC8,
'É': 0xC9,
'Ę': 0xCA,
'Ë': 0xCB,
'Ě': 0xCC,
'Í': 0xCD,
'Î': 0xCE,
'Ď': 0xCF,
'Đ': 0xD0,
'Ń': 0xD1,
'Ň': 0xD2,
'Ó': 0xD3,
'Ô': 0xD4,
'Ő': 0xD5,
'Ö': 0xD6,
'×': 0xD7,
'Ř': 0xD8,
'Ů': 0xD9,
'Ú': 0xDA,
'Ű': 0xDB,
'Ü': 0xDC,
'Ý': 0xDD,
'Ţ': 0xDE,
'ß': 0xDF,
'á': 0xE1,
'â': 0xE2,
'ă': 0xE3,
'ä': 0xE4,
'ĺ': 0xB5,
'ć': 0xE6,
'ç': 0xE7,
'č': 0xE8,
'é': 0xE9,
'ę': 0xEA,
'ë': 0xEB,
'ě': 0xEC,
'í': 0xED,
'î': 0xEE,
'ď': 0xEF,
'đ': 0xF0,
'ń': 0xF1,
'ň': 0xF2,
'ó': 0xF3,
'ô': 0xF4,
'ő': 0xF5,
'ö': 0xF6,
'÷': 0xF7,
'ř': 0xF8,
'ů': 0xF9,
'ú': 0xFA,
'ű': 0xFB,
'ü': 0xFC,
'ý': 0xFD,
'ţ': 0xFE,
'˙': 0xFF,
'Ł': 0xA3,
'ł': 0xB3,
'Š': 0xA9,
'š': 0xB9,
'Ž': 0xAE,
'ž': 0xBE,
'Ť': 0xAB,
'ť': 0xBB,
};
tohle je z ty slop online verze. iOS nevim kde mam :D |
|