我正在使用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。
答案 0 :(得分:2)
替换<br>
的方式很好,除了您可能想在结束>
之前留出空格,并在{{1}之前留出可选的/
}:
>
但这并不能解决您得到的是HTML而不是纯文本的问题。最好让另一端向您发送文本而不是HTML。通过向您发送HTML,他们可以为您提供重要的工作量。您不想用换行符 just 替换const fixed = note.body.replace(/<br\s*\\?>/g, "\r\n");
,因为HTML可以包含各种其他内容,例如命名字符实体(<br>
,{{ 1}}等),数字字符实体(例如<
,&
标签(可能引发XSS攻击)等。当您输出文本并转义{{1 }}和c;
,并以它们作为那些字符而不是HTML的形式输出,因此,如果收到的HTML中包含script
,则实际上您会看到{{1} },<
,&
和<
出现在显示屏上,这不是主意。如果您的起点是HTML,则在不使用脚本的情况下正确解释它是很困难的。 (React确实有注入原始HTML的选项,但是它的名称出于荒谬的尴尬名称 。:-))
一旦有了文本,就可以使用标准的换行符(&
,l
或t
),可以将每行呈现在自己的;
中以获取行中断输出,因为通常在HTML中,换行符(或任何空白行)只是一个空格:
\r
示例:
\n
\r\n