web-dev-qa-db-ja.com

javascriptを使用してHTML文字エンティティを通常のテキストに変換します

質問はそれをすべて言います:)

例えば。 >があり、javascriptのみを使用して>が必要です

更新:jqueryが簡単な方法のようです。しかし、軽量のソリューションがあればいいのですが。これを単独で実行できる関数のようなものです。

17
nuaavee

あなたはこのようなことをすることができます:

String.prototype.decodeHTML = function() {
    var map = {"gt":">" /* , … */};
    return this.replace(/&(#(?:x[0-9a-f]+|\d+)|[a-z]+);?/gi, function($0, $1) {
        if ($1[0] === "#") {
            return String.fromCharCode($1[1].toLowerCase() === "x" ? parseInt($1.substr(2), 16)  : parseInt($1.substr(1), 10));
        } else {
            return map.hasOwnProperty($1) ? map[$1] : $0;
        }
    });
};
29
Gumbo
function decodeEntities(s){
    var str, temp= document.createElement('p');
    temp.innerHTML= s;
    str= temp.textContent || temp.innerText;
    temp=null;
    return str;
}

alert(decodeEntities('<'))

/*  returned value: (String)
<
*/
19
kennebec

そこにライブラリがあることは知っていますが、ここにブラウザ用のソリューションがいくつかあります。これらは、textareaやinput [type = text]など、文字を表示する人間の編集可能な領域にhtmlエンティティデータ文字列を配置する場合にうまく機能します。

古いバージョンのIEをサポートする必要があるため、この回答を追加します。数日分の調査とテストが終了したと思います。誰かがこれを役立つと思ってくれることを願っています。

まず、これはjQueryを使用する最新のブラウザ用です。10(7、8、または9)より前のバージョンのIEをサポートする必要がある場合は、これを使用しないでください。改行は、1行の長いテキストだけを残します。

if (!String.prototype.HTMLDecode) {
    String.prototype.HTMLDecode = function () {
            var str = this.toString(),
            $decoderEl = $('<textarea />');

        str = $decoderEl.html(str)
            .text()
            .replace(/<br((\/)|( \/))?>/gi, "\r\n");

        $decoderEl.remove();

        return str;
    };
}

これは上記のkennebecの作業に基づいていますが、いくつかの違いは主に古いIEバージョンのためです。これにはjQueryは必要ありませんが、ブラウザーは必要です。

if (!String.prototype.HTMLDecode) {
    String.prototype.HTMLDecode = function () {
        var str = this.toString(),
            //Create an element for decoding            
            decoderEl = document.createElement('p');

        //Bail if empty, otherwise IE7 will return undefined when 
        //OR-ing the 2 empty strings from innerText and textContent
        if (str.length == 0) {
            return str;
        }

        //convert newlines to <br's> to save them
        str = str.replace(/((\r\n)|(\r)|(\n))/gi, " <br/>");            

        decoderEl.innerHTML = str;
        /*
        We use innerText first as IE strips newlines out with textContent.
        There is said to be a performance hit for this, but sometimes
        correctness of data (keeping newlines) must take precedence.
        */
        str = decoderEl.innerText || decoderEl.textContent;

        //clean up the decoding element
        decoderEl = null;

        //replace back in the newlines
        return str.replace(/<br((\/)|( \/))?>/gi, "\r\n");
    };
}

/* 
Usage: 
    var str = "&gt;";
    return str.HTMLDecode();

returned value: 
    (String) >    
*/
1
CICDC

何も組み込まれていませんが、これを行うために作成されたライブラリはたくさんあります。

ここ は1つです。

そして ここ jQueryプラグインです。

0
Oded