2011-01-24 2 views

답변

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; 
} 
+3

흥미로운 솔루션입니다. –

+0

나는 (바이올린을 수정했다.) (http://jsfiddle.net/e89hJ/1/) 내가 게시 한 라이브러리 기반 솔루션의 입력과 출력에 대해이 솔루션을 테스트했는데 약간의 불일치가 있었다. 즉, 인코딩 된 입력을 입력하고 110 개의 문자를받은 다음 동일한 데이터의 디코딩 된 입력을 입력하고 96 개의 문자를 얻었습니다. 왜 정확히, 그러나 그것은 가치가 있을지도 모르겠다. –

+0

@Nathan Taylor - 불일치는 jQuery의'.val' 또는 줄 바꿈으로 인해 발생할 수 있습니다. – karim79

0

불행하게도, 자바 스크립트는 기본적으로 무엇을이다 인코딩 또는 HTML 엔티티 디코딩을 지원하지 않습니다 '실제'문자열 길이를 얻으려면해야합니다. HTML 엔터티를 디코딩하고 인코딩 할 수있는 타사 라이브러리를 찾을 수 있었지만 제대로 작동하는 것처럼 보였습니다. 그러나 이 완료되면이 될 것입니다.

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

3

아직 jQuery를 사용하여 해결책이 없기 때문에 :

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

이 karim79 같은 동일한 방법을 사용하지만 결코 문서에 생성 된 요소를 추가하지 않습니다.

+2

어쩌면 내가 누락되었지만 karim의 답은 요소를 문서에 추가하지 않습니다. –

+0

Hrm ok, 나는 단지 그의 대답의 반을 읽었던 것처럼 보인다 (또는 그는 그것을 편집했다) – ThiefMaster

1

브라우저에서 자바 스크립트를 실행하는 경우 도움을 청합니다. 요소를 만들고 innerHTML을 HTML 엔터티가 포함 된 문자열로 설정할 수 있습니다. 그런 다음 방금 작성한 요소의 내용을 텍스트로 추출하십시오. 여기

은 예입니다 (Mootools의 사용) : 대부분의 용도에 http://jsfiddle.net/mqchen/H73EV/

2

당신은 할 수 세미콜론 다음에 문자, 또는 가능한 '#'와 숫자 뒤에 앰퍼샌드, 하나 개의 문자입니다 가정합니다.

관련 문제