2017-03-25 4 views

答えて

0

String#replaceに正規表現と置換機能を使用します。あなたは正規表現を使用して、各HTMLエンティティから文字コードを解析して、その文字の形に各コードをオンにするString.fromCharCodeを呼び出すことができます。

var string = 'Mc'Dought' 
 

 
function convert (string) { 
 
    return string.replace(/&#(?:x([\da-f]+)|(\d+));/ig, function (_, hex, dec) { 
 
    return String.fromCharCode(dec || +('0x' + hex)) 
 
    }) 
 
} 
 

 
console.log(convert(string))

+0

正規表現は何をパースしていることは、正規でない場合、解析するために特に良いものではありません。この場合、非常に頻繁にそうではない可能性があります(たとえば、HTMLの解析)。 – RobG

+0

OPの入力文字列を指定すると、タグ、インラインスタイル、スクリプトなどの追加を開始したときにHTMLの解析がはるかに微妙であることを理解していますが、このメソッドは十分に見えました。おそらくこの答えを削除することになります。 – gyre

0

は、あなたが求めるものを注意してください。

シングルクォートのエスケープシーケンスがあります。それをページに投げれば、正しく表示されます。

一方、実際の一重引用符文字に変換しようとすると、問題が発生する可能性があります。

の結果を確認するには、このコードスニペットをチェックアウト:あなたが例えば(このすべてを理解し、まだそれをエスケープ解除したい場合は、あなたが設定した文字列を使用する必要が

<INPUT Value="Mc&#039;Dought"> 
 
<BR> 
 
<INPUT Value="Mc'Dought"> 
 
<BR> 
 
<SPAN>Mc&#039;Dought</SPAN> 
 
<BR> 
 
<SPAN>Mc'Dought</SPAN> 
 
<BR> 
 
<INPUT Value='Mc'Dought'> <!-- Problems!! --> 
 
<BR> 
 
<SPAN>Mc'Dought</SPAN>

titleまたはalertを発行してください)、私は&#039を置き換えるのではなく、受け入れられたHTML-unescapeメソッドを使用することをお勧めします。 this answerを参照してください。

のjQuery:

function escapeHtml(unsafe) { 
    return $('<div />').text(unsafe).html() 
} 

function unescapeHtml(safe) { 
    return $('<div />').html(safe).text(); 
} 

平野Javascriptを:

function unescapeHtml(safe) { 
    return safe.replace(/&amp;/g, '&') 
     .replace(/&lt;/g, '<') 
     .replace(/&gt;/g, '>') 
     .replace(/&quot;/g, '"') 
     .replace(/&#039;/g, "'"); 
} 
+0

プレーンスクリプトのバージョンは、必要以上に複雑です。正規表現でHTMLを解析することは[*推奨しない*](http://stackoverflow.com/questions/1732348/regex-match-open-tags-except-xhtml-self-contained-tags/1732454#1732454)です。 – RobG

関連する問題