当前位置: 首页 > 面试题库 >

html / templates-用替换换行符

子车桐
2023-03-14
问题内容

我正在加载一个包含换行符的文本文件,并将其传递给html/templates

用替换为已加载的字符串中的\nwith <br>,它们会被模板转义为html &lt;br&gt;并显示在浏览器中,而不是引起换行。

如何更改此行为而无需切换到text/templates(没有XSS保护)?


问题答案:

看来您可以先在文本上运行template.HTMLEscape()进行净化,然后执行\ n
替换所信任的内容,然后将其用作预先转义和信任的模板数据。

更新:在Kocka的示例上扩展,这是我想到的:

package main

import (
    "html/template"
    "os"
    "strings"
)

const page = `<!DOCTYPE html>
<html>
  <head>
  </head>
  <body>
    <p>{{.}}</p>
  </body>
</html>`

const text = `first line
<script>dangerous</script>
last line`

func main() {
    t := template.Must(template.New("page").Parse(page))
    safe := template.HTMLEscapeString(text)
    safe = strings.Replace(safe, "\n", "<br>", -1)
    t.Execute(os.Stdout, template.HTML(safe)) // template.HTML encapsulates a known safe HTML document fragment.
}

http://play.golang.org/p/JiH0uD5Zh2

输出为

<!DOCTYPE html>
<html>
  <head>
  </head>
  <body>
    <p>first line<br>&lt;script&gt;dangerous&lt;/script&gt;<br>last line</p>
  </body>
</html>

在浏览器中呈现的文本是

first line
<script>dangerous</script>
last line


 类似资料:
  • 有没有办法做到这一点?

  • 这是我的密码 我想替换字体标签,并把span标签。在这将取代第一个字体标签但不是第二个标签

  • 问题内容: 我刚刚完成了从数据库中剥离HTML实体的任务,因为我们进行了很多爬网,并且某些爬网程序在输入时没有这样做:( 因此,我开始编写一堆看起来像这样的查询; 显然,这是一种非常幼稚的方法。我一直在尝试找出解码功能是否可以做些聪明的事情。也许通过正则表达式抓住HTML实体一样,然后通过 刚刚 的部分到ASCII解码器,以及重建串…或东西… 我可以按查询继续吗?其中可能只有40个左右。 问题答案

  • All linebreaks will be converted to <br /> tags in the given variable. This is equivalent to the PHP nl2br() function. 所有的换行符将被替换成 <br />.功能同PHP中的nl2br()函数一样. Example 5-14. nl2br 例 5-14.换行符替换成<br /> i

  • 问题内容: 尝试简单地替换一些新行。尝试了3种不同的方法,但我没有任何改变: 这些都应该起作用,但是我仍然可以换行。它们是双精度的:“ \ r \ r”。那不应该让这些失败吗? 问题答案: 已经有在换行符之前 替换 插入* 标签的[]功能: ~~~~* 示例(键盘): 但是,如果仍然无法正常工作,请确保文本被双引号引起来。 那是因为单引号不会“扩展”转义序列,例如与双引号字符串相比。引用PHP文档

  • 如何替换所有标签