JavaScript获取字符串的实际长度(没有实体)

时间:2011-01-24 23:06:09

标签: javascript html-entities

我需要确定可能包含html-entities的字符串的长度。

例如“& darr;” (↓)将返回长度6,这是正确的,但我希望这些实体只计为1个字符。

6 个答案:

答案 0 :(得分:11)

<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

Try it here.

您可能希望将其放在函数中以方便使用,例如:

function realLength(str) { // maybe there's a better name?
    var el = document.createElement("div");
    el.innerHTML = str;
    return el.innerHTML.length;   
}

答案 1 :(得分:3)

由于还没有使用jQuery的解决方案:

var str = 'lol&amp;';
alert($('<span />').html(str).text().length); // alerts 4

使用与karim79相同的方法,但它永远不会将创建的元素添加到文档中。

答案 2 :(得分:3)

你可以在大多数情况下假设一个&符号后跟字母,或者一个可能的'#'和数字,后跟一个分号,是一个字符。

var strlen=string.replace(/&#?[a-zA-Z0-9]+;/g,' ').length;

答案 3 :(得分:1)

如果您在浏览器中运行javascript,我建议您使用它来帮助您。您可以创建一个元素并将其innerHTML设置为包含HTML实体的字符串。然后将刚刚创建的元素的内容提取为文本。

以下是一个示例(使用Mootools):http://jsfiddle.net/mqchen/H73EV/

答案 4 :(得分:0)

不幸的是,JavaScript本身并不支持HTML实体的编码或解码,这是获取“真实”字符串长度所需要做的事情。我能够找到这个能够对HTML实体进行解码和编码的第三方库,它似乎运行得很好,但不能保证完成将如何。

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

答案 5 :(得分:0)

使用 ES6(引入 codePointAt()

function strlen (str) {
    let sl = str.length
    let chars = sl
    for (i = 0; i < sl; i++) if (str.codePointAt(i) > 65535) {
       chars--;
       i++;
    }
    return chars
}

注意 charCodeAt() 的工作方式不同。