如何在JS(reactjs)中将字符串转换为普通文本

1u4esq0p  于 2022-12-22  发布在  React
关注(0)|答案(4)|浏览(562)

我正在从api调用数据,而数据有特殊字符。例如,在返回的对象中:

{
  question : "In which year did the British television series "The Bill" end?"
}

如果我将这个值存储在一个变量中,它会将其保存为字符串,当我使用JSX调用这个变量时,它会认为它是一个字符串,并且不识别特殊字符。
我该如何解决这个问题?

export default function Quiz(props){
const element = "In which year did the British television series "The Bill" end?"
        
    return (
         <main>
             {element}
          </main>
            )
  }

我想把这个呈现在屏幕上
英国电视连续剧《比尔》是哪一年结束的?

dxxyhpgq

dxxyhpgq1#

您可以使用DOMParser将HTML实体转换为字符,方法是获取解析后的body元素的innerText。由于我们只处理和呈现文本内容,而不是HTML内容,因此我们不必担心危险地设置HTML(使用dangerouslySetInnerHTML之类的内容),这可能会导致XSS:

const {useMemo} = React;

const App = () => {
  const element = useMemo(() => {
    const str = "In which year did the British television series &quot;The Bill&quot; end?";
    return new DOMParser().parseFromString(str, "text/html").body.innerText;
  }, []);
  return <p>{element}</p>;
};

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

ny6fqffe2#

您可以使用javascript字符串方法replaceAll()
您可以将其用作string.replaceAll("““,”\"“)

string = "In which year did the British television series &quot;The Bill&quot; end?";
console.log(string.replaceAll("&quot;","\""));

运行代码段,您将得到您想要的答案。

sf6xfgos

sf6xfgos3#

您可以创建并调用一个小的“sanitise”函数,该函数接受键/值对的字典,并在每个字典上运行replaceAll来交换HTML实体。

const data ={
  question: 'In which &lt;year&gt; did the British television series &quot;The Bill&quot; end?'
}

const dict = {
  '&quot;': '"',
  '&gt;': '>',
  '&lt;': '<'
};

function sanitise(str) {
  for (const key in dict) {
    str = str.replaceAll(key, dict[key]);
  }
  return str;
}

console.log(sanitise(data.question));
u5rb5r59

u5rb5r594#

这里是非常简单易用的解决方案,没有任何头痛
只需安装一个名为react-render-markup react包,然后导入到您的组件中,在该组件中您要将此字符串转换为计划文本,它实际上是一个HTML标记😉,如下所示:

import { Markup } from 'react-render-markup';

export default function Quiz(props){ 

const element = "In which year did the British television series &quot;The Bill&quot; end?"   

return (
     <main>
         <Markup markup={element} />
     </main>
  )
}

去看看那神奇的

相关问题