用换行符JS

时间:2018-11-13 17:42:41

标签: javascript reactjs replace line-breaks

我正在使用react并从保存评论的api中提取信息。由于api来自php用户,因此带有br标签的多个注释。我试图用实际的换行符替换每个字符串中的br标签。我也在使用react,所以jQuery是不可行的。

这就是我所拥有的:

this.state.notes.forEach((note) => {
  const fixed = note.body.replace(/<br>/g, "\r\n");
  rows.push(<ListGroupItem hover href="#" className="whiter" key= 
  {note.id}>
    <div className="d-flex justify-content-between">
      <h5 className="mb-1">{ note.name }</h5>
      <small>{ commentDate }</small>
    </div> 
    <p className="mb-1">{ fixed }</p>
  </ListGroupItem>)
}

我已将其替换为空格,并且可以使用,但是不能用于换行符。我要去哪里错了?

编辑1:@ T.J。 Crowder我添加了它在页面上的显示方式。 rows是一个空数组,ListGroupItem来自MDBootstrap。

1 个答案:

答案 0 :(得分:2)

替换<br>的方式很好,除了您可能想在结束>之前留出空格,并在{{1}之前留出可选的/ }:

>

但这并不能解决您得到的是HTML而不是纯文本的问题。最好让另一端向您发送文本而不是HTML。通过向您发送HTML,他们可以为您提供重要的工作量。您不想用换行符 just 替换const fixed = note.body.replace(/<br\s*\\?>/g, "\r\n"); ,因为HTML可以包含各种其他内容,例如命名字符实体(<br>,{{ 1}}等),数字字符实体(例如&lt;&amp;标签(可能引发XSS攻击)等。当您输出文本并转义{{1 }}和&#003c;,并以它们作为那些字符而不是HTML的形式输出,因此,如果收到的HTML中包含script,则实际上您会看到{{1} },<&&lt;出现在显示屏上,这不是主意。如果您的起点是HTML,则在不使用脚本的情况下正确解释它是很困难的。 (React确实有注入原始HTML的选项,但是它的名称​​出于荒谬的尴尬名称​​ 。:-))

一旦有了文本,就可以使用标准的换行符(&lt),可以将每行呈现在自己的;中以获取行中断输出,因为通常在HTML中,换行符(或任何空白行)只是一个空格:

\r

示例:

\n
\r\n