【问题标题】:Rendering tabs and other special characters as is in JSX像在 JSX 中一样渲染标签和其他特殊字符
【发布时间】:2022-01-11 16:10:10
【问题描述】:

我需要完全按照从服务器获取的字符串来呈现它,例如,如果我得到一个包含“\t”的字符串,我需要将它呈现为“\t”而不是空格/s。 在组件的状态下,我看到字符串出现了特殊字符但没有呈现:

状态: '\"id\"\t\"name\n key\"'

渲染的内容: "id" "name key"

我怎样才能防止这种情况发生?

【问题讨论】:

  • 服务器的确切响应是什么? '\"id\"\t\"name\n key\"'
  • 或者是你的服务器响应'"id"\t"name\n key"'。所以在这种情况下,它会返回所有文本字符和特殊字符而没有单个转义反斜杠?
  • 我服务器的响应是'"id"\t"name\n key"',我想按原样呈现。
  • 知道了,看看答案。这应该涵盖了大部分出现的特殊字符

标签: html reactjs jsx


【解决方案1】:

由于 JS 和 DOM 默认解析 \n 等特殊字符,因此您可以定义您希望阻止其以默认方式表现的特殊字符,并将其替换为之前的原始加反斜杠:

看看这个可运行的sn-p:

let textWithSpecialChars = `"id"\t"name\n key\f \r \b"`;

const specialChars = ['\\b', '\\r', '\\f', '\\n', '\\t'];

let modifiedTextWithSpecialChars = JSON.stringify(textWithSpecialChars);

specialChars.forEach((char) => {
  modifiedTextWithSpecialChars = modifiedTextWithSpecialChars.replace(char, '\\' + char);
});

console.log(modifiedTextWithSpecialChars); 
// "\"id\"\\t\"name\\n key\\f \\r \\b\""

console.log(JSON.parse(modifiedTextWithSpecialChars));
// "id"\t"name\n key\f \r \b"

console.log(textWithSpecialChars);
// "id" "name
// key 
// "


document.body.innerHTML = JSON.parse(modifiedTextWithSpecialChars)

分析

  1. 您收集该数组中的所有特殊字符并将它们转义。
  2. 字符串化你的字符串,这样你就可以在JS中使用该字符串,而无需JS解析特殊字符
  3. 获取此字符串并遍历您在上面添加的所有特殊字符
  4. 对于每个特殊字符,取原始字符串并将\n 等特殊字符替换为\\n。将该值返回到修改字符串并继续,直到所有特殊字符都被替换。这个字符串化的结果将是'\"id\"\\t\"name\\n key\\f \\r \\b\"'
  5. 解析您的字符串,JS 不会将特殊字符解析为特殊字符,而是将它们是纯字符串。

【讨论】:

    猜你喜欢
    • 2016-06-06
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2020-06-23
    • 2012-11-08
    • 2016-03-10
    • 2023-04-05
    相关资源
    最近更新 更多