@maxwellum

Почему считает неверное количество символов в строке на кириллице?

Здравствуйте. Занимаюсь правкой одной CMS, возникла такая проблема: есть функция strLenCalc на javascript для подсчета количества символов в строке, при его превышении автоматически обрубается лишнее. С английскими буквами все работает как надо, но кириллические символы считаются как 3 за 1. Например, в слове Hello 5 символов, а в слове Привет 18 символов.
Вот сама функция и связанные с нею:
function strlen(str) {
	return (BROWSER.ie && str.indexOf('\n') != -1) ? str.replace(/\r?\n/g, '_').length : str.length;
}


function mb_strlen(str) {
	var len = 0;
	for(var i = 0; i < str.length; i++) {
		len += str.charCodeAt(i) < 0 || str.charCodeAt(i) > 255 ? (charset == 'utf-8' ? 3 : 2) : 1;
	}
	return len;
}

function mb_cutstr(str, maxlen, dot) {
	var len = 0;
	var ret = '';
	var dot = !dot ? '...' : dot;
	maxlen = maxlen - dot.length;
	for(var i = 0; i < str.length; i++) {
		len += str.charCodeAt(i) < 0 || str.charCodeAt(i) > 255 ? (charset == 'utf-8' ? 3 : 2) : 1;
		if(len > maxlen) {
			ret += dot;
			break;
		}
		ret += str.substr(i, 1);
	}
	return ret;
}

function strLenCalc(obj, checklen, maxlen) {
	var v = obj.value, charlen = 0, maxlen = !maxlen ? 200 : maxlen, curlen = maxlen, len = strlen(v);
	for(var i = 0; i < v.length; i++) {
		if(v.charCodeAt(i) < 0 || v.charCodeAt(i) > 255) {
			curlen -= charset == 'utf-8' ? 2 : 1;
		}
	}
	if(curlen >= len) {
		$(checklen).innerHTML = curlen - len;
	} else {
		obj.value = mb_cutstr(v, maxlen, 0);
	}
}
  • Вопрос задан
  • 71 просмотр
Решения вопроса 1
@402d
начинал с бейсика на УКНЦ в 1988
И в чем неправильность ? длина строки в байтах в кодировке UTF-8 больше числа символов.
0-127 как 1 байт.
128- 255 как 2 байта
русские символы по три байта на символ
почитайте про кодировку .
Ответ написан
Пригласить эксперта
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Войти через центр авторизации
Похожие вопросы