除非需要,否则停止制作文本 HTML

Stop text being made HTML unless needed

我可以让用户 post 将一些文本添加到消息提要中。他们可以随心所欲地输入内容。

后端服务器检测到有link和其他link可用元素(比如标记其他人),然后将这些link保存到数据库中。

当向用户提供完整的消息列表时,他们会看到用户已 post 编辑的内容,任何本应是 link 的内容都会变成 link

例如有人输入 www.foobar.com 所以 post 将显示 <a href='www.foobar.com'>www.footbar.com</a>

这很好用,但是如果有人自己输入 HTML 会怎么样。首先,它会弄乱格式,其次,它允许用户 post 自己的 HTML,这很明显很危险。

我需要一种不将 API 返回的文本转换为 HTML 的方法,除非它是我想要的 HTML。但是我不想阻止试图 post HTML 的人,只是阻止它变成 HTML

Twitter 做得对。如果我post把这个发到推特上

<a href='www.foobar.com'>www.footbar.com</a>

它将准确显示您在那里看到的内容,但 www.foobar.com 将突出显示并可点击。

尽管可能不相关,但我使用的是 ASP.NET Web API 后端和 Knockout.JS 前端

更新

我正在使用以下代码来显示文本(剔除 JS observables)

  <div data-bind="foreach: allMessages">
    <span data-bind="html: theText"></span>

您的后端代码应对传入的数据进行编码。这会将 html 标签更改为基于文本的标签。 例如 <div>test</div> 更改为 %3Cdiv%3Etest%3C/div%3E。这将防止您不想要的数据进入您的数据库。