2017-11-29 8 views
2

ここにはhtmlエンティティがエンコードされた文字列があります。私はこれの内部にHTMLエンティティを含む文字列をデコードしようとしています。私はそれがここにどのようにエンコードされたhtmlをデコードするのですか

<li>please click <a target="_blank" href="https:app.answers/detail/a_id/140">here</a></li> 

に変換したい

これは私が符号化された形式で持っているもの

&lt;li&gt;please click &lt;a target=&quot;_blank&quot; href=&quot;https://app.answers/detail/a_id/140&quot;&gt;here&lt;/a&gt;&lt;/li&gt; 

ですが、私がしようとしているものです。

decodedVal = decodeURI(&lt;li&gt;please click &lt;a target=&quot;_blank&quot; href=&quot;https://app.answers/detail/a_id/140&quot;&gt;here&lt;/a&gt;&lt;/li&gt;) 

しかし、私はこれを行うことができますどのように

例外URI malformedを取得していますか?

+2

を追加することによって実行不要なスクリプトを見ることができ、あなたは 'decodeURI'に引数の前後に引用符を配置する必要があります。第二に、これはすでに以前に尋ねられています。 –

+0

decodeURIに渡す前に、式を引用符で囲む必要があります:https://www.w3schools.com/jsref/jsref_decodeuri.asp – SPlatten

答えて

4

jQueryを使用すると、単純にその文字列をHTMLコンテンツとして生成し、最後にjQuery text()メソッドを使用してテキストコンテンツを取得します。純粋なJavaScriptで

var str = '&lt;li&gt;please click &lt;a target=&quot;_blank&quot; href=&quot;https://app.answers/detail/a_id/140&quot;&gt;here&lt;/a&gt;&lt;/li&gt;'; 
 

 
console.log(
 
    $('<div/>', { 
 
    html: str 
 
    }).text() 
 
)
<script src="https://ajax.googleapis.com/ajax/libs/jquery/2.1.1/jquery.min.js"></script>


、ダミーDOM要素を生成することによって、同じことを行います。

var str = '&lt;li&gt;please click &lt;a target=&quot;_blank&quot; href=&quot;https://app.answers/detail/a_id/140&quot;&gt;here&lt;/a&gt;&lt;/li&gt;'; 
 

 
var ele = document.createElement('div'); 
 
ele.innerHTML = str; 
 

 
console.log(
 
    ele.textContent 
 
) 
 

 
// or by using jQuery.parseHTML 
 
console.log(
 
    jQuery.parseHTML(str)[0].textContent 
 
)
<script src="https://ajax.googleapis.com/ajax/libs/jquery/2.1.1/jquery.min.js"></script>

-3

このスレッドにはいくつかの機能があります:HTML Entity Decode(decodeURIを使用して)URIをデコードするよりも異なっているHTMLエンティティ(あなたが探している結果)をデコード

編集: 上記の答えよりも、変更している入力文字列を信頼できない場合は、以下を推奨します(リンクされたスレッドのRobert Kの応答から変更しました)。あなたはまず第一に、あなたの入力文字列に次の<img onerror="alert(0)" src=invalid>asdf</img>

decodeEntities = str => { 
    if(str && typeof str === 'string') { 
     // strip script/html tags 
     str = str.replace(/<script[^>]*>([\S\s]*?)<\/script>/gmi, ''); 
     str = str.replace(/<\/?\w(?:[^"'>]|"[^"]*"|'[^']*')*>/gmi, ''); 
     element.innerHTML = str; 
     str = element.textContent; 
     element.textContent = ''; 
    } 

    return str; 
} 

var str = '&lt;li&gt;please click &lt;a target=&quot;_blank&quot;href=&quot;https://app.answers/detail/a_id/140&quot;&gt;here&lt;/a&gt;&lt;/li&gt;<img onerror="alert(0)" src=invalid>asdf</img>'; 

var ele = document.createElement('div'); 
ele.innerHTML = decodeEntities(str); 

console.log(
    ele.textContent 
) 
+0

私はちょうど私が他の答えと異なる何かをする理由についてそれを更新しました上記。それはより適していますか? –

関連する問題