2 回答

TA貢獻(xiàn)2041條經(jīng)驗(yàn) 獲得超4個(gè)贊
不要將換行符更改為<br>javascript,而是在 Go 中進(jìn)行: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貢獻(xiàn)1789條經(jīng)驗(yàn) 獲得超8個(gè)贊
您可以簡(jiǎn)單地解決 CSS 格式問(wèn)題,即white-space屬性:
white-space 屬性指定如何處理元素內(nèi)的空白。
CSS 語(yǔ)法:
white-space: normal|nowrap|pre|pre-line|pre-wrap|initial|inherit;
該pre值就像被包裝在一個(gè) HTML<pre>標(biāo)簽中一樣,這也將呈現(xiàn)雙選項(xiàng)卡。
使用該pre-line值對(duì)您有用:
pre-line空格序列將折疊為單個(gè)空格。文本將在必要時(shí)換行,并在換行符處
因此保留了行,但多個(gè)空格被折疊為一個(gè)。優(yōu)點(diǎn)是您不需要轉(zhuǎn)換原始文本,瀏覽器會(huì)應(yīng)用正確的格式。代碼對(duì)于 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"
你最初的雙標(biāo)簽 \t\t
請(qǐng)注意,您的初始雙標(biāo)簽\t\t不是由瀏覽器或表單提交(也不是數(shù)據(jù)存儲(chǔ),如果您將其存儲(chǔ)在那里)生成,而是很可能是您使用縮進(jìn) 2 個(gè)標(biāo)簽的模板的結(jié)果。模板的縮進(jìn)也會(huì)寫入輸出,因此您應(yīng)該正確關(guān)閉<textarea>模板中沒有換行符的內(nèi)容。由于您沒有發(fā)布您的模板和代碼,我無(wú)法幫助您找出初始雙標(biāo)簽的原因,但您應(yīng)該找到根本原因而不是治療癥狀。
- 2 回答
- 0 關(guān)注
- 381 瀏覽
添加回答
舉報(bào)