htmlエンティティを含む文字列の長さを決定する必要があります。JavaScript実際の文字列の長さを取得する(エンティティなし)
たとえば、「& darr;」 (↓)は長さ6が返されますが、これは正しいですが、これらのエンティティを1文字だけとしてカウントします。
htmlエンティティを含む文字列の長さを決定する必要があります。JavaScript実際の文字列の長さを取得する(エンティティなし)
たとえば、「& darr;」 (↓)は長さ6が返されますが、これは正しいですが、これらのエンティティを1文字だけとしてカウントします。
<div id="foo">↓</div>
alert(document.getElementById("foo").innerHTML.length); // alerts 1
したがって、その根拠に基づいて、divを作成し、それにエンティティライズされた文字列を追加し、HTMLを抽出して長さを確認します。
var div = document.createElement("div");
div.innerHTML = "↓↓↓↓";
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;
}
残念ながら、JavaScriptがネイティブに何をしている、HTMLエンティティのエンコードやデコードをサポートしていません。実際の文字列の長さを取得する必要があります。私はHTMLエンティティをデコードしてエンコードすることができるこのサードパーティのライブラリを見つけることができました。十分にうまくいくようですが、が完了する方法は保証されていません。です。
のjQueryを使用して解決策はまだありませんので:
var str = 'lol&';
alert($('<span />').html(str).text().length); // alerts 4
はkarim79のように同じアプローチを使用しますが、それはドキュメントに作成された要素を追加することはありません。
多分私は何かが不足しているが、カリスムの答えはその要素を文書に追加しない。 –
Hrm ok、私は彼の答えの半分しか読んでいなかったようです(彼はそれを編集しました) – ThiefMaster
ブラウザでjavascriptを実行している場合は、それを使用して助けてください。要素を作成し、そのinnerHTMLをHTMLエンティティを含む文字列に設定することができます。次に、作成した要素の内容をテキストとして抽出します。ここで
(MooToolsはを使用しています)の例です:http://jsfiddle.net/mqchen/H73EV/
あなたは可能性がほとんどの目的のために、セミコロンに続く文字が続くアンパサンド、または可能な「#」と数字は、1つの文字であることを前提としています。
var strlen=string.replace(/&#?[a-zA-Z0-9]+;/g,' ').length;
興味深い解決策。 –
私は[fiddleを改変しました](http://jsfiddle.net/e89hJ/1/)、私が投稿したライブラリベースのソリューションの入力と出力に対してこのソリューションをテストしましたが、いくつかの矛盾がありました。すなわち、私は符号化された入力を入力し、110の文字を取得し、同じデータの復号化された入力を入力し、96の文字を得ました。なぜ正確にはわからないが、それはチェックの価値があるかもしれない。 –
@Nathan Taylor - この不一致は、jQueryの '.val'や改行によって起こりうるものです。 – karim79