解码特殊字符

Decoding Special Character

我正在进行 api 调用,有时会 returns 字符串中包含特殊字符代码,返回类似 adiós 的内容,我需要向用户显示作为 adiós 代替。我已经单独和一起尝试了 escape/unescape encodeURI/decodeURI 的几种组合,但无论我做什么,我似乎都无法让它发挥作用!我的队友可以使用 dangerouslySetInnerHTML 让它们显示,但我知道必须有更好的方法吗?我可能会错过什么?我唯一能想到的就是为它写一个正则表达式,但问题是我不知道我可能从 api 返回的所有字符,不知道在正则表达式中写什么。任何帮助,将不胜感激! 我看过一些帖子,其中一篇是 this 一篇,另一篇建议在 index.html 文件中设置 utf-8 编码,但问题是已经设置了。如果有任何不同,我们正在为我们的项目使用 React!

这是我设置文本的代码

setHelperText(
  // todo: fix this to display dangerously set inner HTML so it handles regex
  `Sorry, wrong answer! The correct answer was: ${currentQuestion.correctAnswer}`
);

其中 currentQuestion 来自 api 请求。 api 是 https://opentdb.com/api

如果您想要将用户输入反馈给用户,您可以考虑使用 DOMParser to parse the HTML entities for you. The main reason why dangerouslySetInnerHTML is considered dangerous is if you're displaying user input back to the end-user as this can enable XSS attacks. You can also consider using DOMPurify 或其他清理库。

下面是一个使用 DOMParser 解析 HTML 字符串的示例:

const parseEntities = txt => new DOMParser().parseFromString(txt, 'text/html').body.innerText;

const App = () => {
  const txt = 'adiós';
  return <p>{parseEntities(txt)}</p>;
};

ReactDOM.render(<App />, document.body);
<script src="https://cdnjs.cloudflare.com/ajax/libs/react/16.6.3/umd/react.production.min.js"></script>
<script src="https://cdnjs.cloudflare.com/ajax/libs/react-dom/16.6.3/umd/react-dom.production.min.js"></script>

也许这有帮助

function htmlEntities(str) {
      return String(str).replace('&ntilde;', 'ñ')
                        .replace('&Ntilde;', 'Ñ')
                        .replace('&amp;', '&')
                        .replace('&Ntilde;', 'Ñ')
                        .replace('&ntilde;', 'ñ')
                        .replace('&Ntilde;', 'Ñ')
                        .replace('&Agrave;', 'À')
                        .replace('&Aacute;', 'Á')  
                        .replace('&Acirc;','Â')
                        .replace('&Atilde;','Ã')   
                        .replace('&Auml;','Ä')
                        .replace('&Aring;','Å')
                        .replace('&AElig;','Æ')
                        .replace('&Ccedil;','Ç')
                        .replace('&Egrave;','È')
                        .replace('&Eacute;','É')
                        .replace('&Ecirc;', 'Ê')
                        .replace('&Euml;','Ë')
                        .replace(   '&Igrave;', 'Ì')
                        .replace('&Iacute;', 'Í'    )
                        .replace('&Icirc;', 'Î' )
                        .replace(   '&Iuml;', 'Ï')
                        .replace(   '&ETH;', 'Ð')
                        .replace(   '&Ntilde;', 'Ñ')
                        .replace(   '&Ograve;', 'Ò')
                        .replace(   '&Oacute;', 'Ó')
                        .replace('&Ocirc;', 'Ô' )
                        .replace(   '&Otilde;', 'Õ')
                        .replace('&Ouml;', 'Ö'  )
                        .replace('&Oslash;', 'Ø'    )
                        .replace(   '&Ugrave;' ,'Ù')
                        .replace(   '&Uacute;', 'Ú')
                        .replace(   '&Ucirc;', 'Û')
                        .replace(   '&Uuml;', 'Ü')
                        .replace(   '&Yacute;', 'Ý')
                        .replace('&THORN;', 'Þ' )
                        .replace(   '&szlig;', 'ß')
                        .replace(   '&agrave;', 'à')
                        .replace(   '&aacute;', 'á')
                        .replace(   '&acirc;', 'â')
                        .replace(   '&atilde;', 'ã')
                        .replace('&auml;', 'ä'  )
                        .replace(   '&aring;', 'å')
                        .replace(   '&aelig;', 'æ')
                        .replace(   '&ccedil;', 'ç')
                        .replace('&egrave;', 'è'    )
                        .replace('&eacute;', 'é'    )
                        .replace('&ecirc;', 'ê' )
                        .replace('&euml;', 'ë'  )
                        .replace(   '&igrave;', 'ì')
                        .replace('&iacute;', 'í'    )
                        .replace('&icirc;', 'î' )
                        .replace('&iuml;', 'ï'  )
                        .replace('&eth;', 'ð'   )
                        .replace(   '&ntilde;', 'ñ')
                        .replace('&ograve;','ò')
                        .replace('&oacute;','ó')
                        .replace('&ocirc;','ô')
                        .replace('&otilde;','õ')
                        .replace('&ouml;','ö')
                        .replace('&oslash;','ø')
                        .replace('&ugrave;','ù')
                        .replace('&uacute;','ú')
                        .replace('&ucirc;','û')
                        .replace('&uuml;' , 'ü')   
                        .replace('&yacute;', 'ý')  
                        .replace('&thorn;', 'þ')
                        .replace('&yuml;', 'ÿ');
}

console.log(htmlEntities("adi&oacute;s"));