2017-12-24 9 views
3

反応し、これはコードに反応考えてみましょう:HTMLの特殊文字(&記号)でレンダリングしないコンポーネント

subTopicOptions = curSubTopics.map((topic) => { 
    return (
     <option value={topic.id}>{topic.name}</option> 
    ) 
}); 

表示するには、残りのAPIからtopic.name出力Environment &amp; Forest値を。

Environment & Forestを選択フィールドに表示するにはどうすればよいですか?

+0

XSS攻撃からあなたを守るために、Reactはトピック名をエスケープします。エスケープされた値は実際のページに正しく表示されるはずです。変更は自動的に行われ、 "&"文字を表示して他のものには使用しないという区別をします。 – Froast

+0

'DOMParser'を使ってそれを行う方法の[コードサンドボックス](https://codesandbox.io/s/ww7zq93j5k)です。 –

答えて

0

Decode & back to & in JavaScriptの先頭の答えに記載されているように、ブラウザのネイティブパーサーを使用できます。 DOMParser APIを使用して

、あなたは次の操作を行うことができます:

const strToDecode = 'Environment &amp; Forest'; 
 
const parser = new DOMParser(); 
 
const decodedString = parser.parseFromString(`<!doctype html><body>${strToDecode}`, 'text/html').body.textContent; 
 
console.log(decodedString);

あなたにデコードするために私たちの文字列を追加することでのHTMLDocumentを作成するDOMParserを使用しているがやっていることを末尾は'<!doctype html><body>'です。新しく作成されたHTMLDocumentの本文のtextContentにある文字列のデコードされた値にアクセスできます。トピックを作成することがあなたのコントロール下にある場合、あなたはdangerouslySetInnerHTML

subTopicOptions = curSubTopics.map((topic) => { 
    return (
     <option value={topic.id} dangerouslySetInnerHTML={{__html: topic.name }} /> 
    ) 
}); 

を使用することができますが、innerHTMLプロパティを使用すると、クロスサイトスクリプティング(XSS)攻撃にあなたを開くことに注意してくださいshoukd

0

、その使用それは賢明です。

関連する問題