2 回答
TA贡献2041条经验 获得超4个赞
不要将换行符更改为<br>javascript,而是在 Go 中进行:http : //play.golang.org/p/jJXMZxtYcv
package main
import (
"html/template"
"log"
"os"
"strings"
)
func main() {
const tpl = `
<!DOCTYPE html>
<html>
<head>
<meta charset="UTF-8">
<title>{{.Title}}</title>
</head>
<body>
<div>{{nl2br .Text}}</div>
</body>
</html>`
check := func(err error) {
if err != nil {
log.Fatal(err)
}
}
funcs := template.FuncMap{
"nl2br": func(text string) template.HTML {
return template.HTML(strings.Replace(template.HTMLEscapeString(text), "\n", "<br>", -1))
},
}
t, err := template.New("webpage").Funcs(funcs).Parse(tpl)
check(err)
data := struct {
Title string
Text string
}{
Title: "My page",
Text: "\t\tLine 1\r\nLine2\r\n",
}
err = t.Execute(os.Stdout, data)
check(err)
}
TA贡献1789条经验 获得超8个赞
您可以简单地解决 CSS 格式问题,即white-space属性:
white-space 属性指定如何处理元素内的空白。
CSS 语法:
white-space: normal|nowrap|pre|pre-line|pre-wrap|initial|inherit;
该pre值就像被包装在一个 HTML<pre>标签中一样,这也将呈现双选项卡。
使用该pre-line值对您有用:
pre-line空格序列将折叠为单个空格。文本将在必要时换行,并在换行符处
因此保留了行,但多个空格被折叠为一个。优点是您不需要转换原始文本,浏览器会应用正确的格式。代码对于 HTML 注入攻击仍然是安全的。
完整示例:
func main() {
t := template.Must(template.New("").Parse(src))
http.HandleFunc("/", func(w http.ResponseWriter, r *http.Request) {
t.Execute(w, text)
})
panic(http.ListenAndServe("localhost:8080", nil))
}
const src = `<html><body>Entered text:
<div style="white-space:pre-line">{{.}}</div>
</body></html>`
const text = "\t\t1st line\n2nd line\r\n3rdline"
你最初的双标签 \t\t
请注意,您的初始双标签\t\t不是由浏览器或表单提交(也不是数据存储,如果您将其存储在那里)生成,而是很可能是您使用缩进 2 个标签的模板的结果。模板的缩进也会写入输出,因此您应该正确关闭<textarea>模板中没有换行符的内容。由于您没有发布您的模板和代码,我无法帮助您找出初始双标签的原因,但您应该找到根本原因而不是治疗症状。
- 2 回答
- 0 关注
- 326 浏览
添加回答
举报