http://www.strictly-software.com/htmlencode

ужно определить длину строки, которая может содержать html-сущности.

Например, "& darr;" (↓) вернет длину 6, что правильно, но я хочу, чтобы эти объекты считались только 1 символом.

Ответы на вопрос(1)

Решение Вопроса
<div id="foo">&darr;</div>

alert(document.getElementById("foo").innerHTML.length); // alerts 1

основываясь на этом обосновании, создайте div, добавьте к нему строку со смешанными объектами, извлеките HTML и проверьте длину.

var div = document.createElement("div");
div.innerHTML = "&darr;&darr;&darr;&darr;";
alert(div.innerHTML.length); // alerts 4

Попробуй это здесь.

Возможно, вы захотите поместить это в функцию для удобства, например:

function realLength(str) { // maybe there's a better name?
    var el = document.createElement("div");
    el.innerHTML = str;
    return el.innerHTML.length;   
}
 Nathan Taylor25 янв. 2011 г., 00:14
Интригующее решение.
 Nathan Taylor25 янв. 2011 г., 00:21
I модифицировал скрипку и проверил это решение на основе входных и выходных данных в библиотечном решении, которое я опубликовал, и обнаружилось некоторое несоответствие. А именно, я ввел кодированный ввод и получил 110 символов, затем ввел декодированный ввод тех же данных и получил 96 символов. Не уверен, почему именно, но это может стоить проверить.
 karim7925 янв. 2011 г., 00:26
@Nathan - Второе обновление с использованием свойства DOM .value, кажется, работает нормально, при условии, что вы не нажали enter нигде в текстовой области (каждый \ n == 1 символ):jsfiddle.net/e89hJ/2
 karim7925 янв. 2011 г., 00:22
@ Натан Тейлор - Несоответствие может быть вызвано jQuery.valили разрывы строк.

Ваш ответ на вопрос