在 GAE 上的 Go 中显示 html/template 产生的换行符

Ook*_*Ook 2 html javascript string google-app-engine go

我的应用程序是用 Go 编写的。应用程序的页面从 HTML 文本区域接收用户数据,该数据作为字符串数据保存到 Google App Engine 数据存储中。然后,在应用程序的另一个页面上,它需要以用户在 HTML 文本区域中键入的格式显示数据,或者至少在用户在 HTML 文本字段中键入数据时按 Enter 键时保留换行符。

我尝试使用<pre>标签来显示用户在文本字段中输入的保留换行符,效果很好。然而我发现有一个双标签

\t\t

使用标签时插入到字符串的开头<pre>,我可以使用 Javascript 删除双标签。

我保留用户在文本字段中输入的换行符的想法是使用 javascript 替换函数来替换所有\r\n,\n\r<br>,但是,它没有成功。Go 似乎没有将换行符输出到 html 源代码中。出于安全原因,我使用“html/template”,但我没想到它会\r\n完全从输出中删除字符。\t\t对于字符串开头的奇怪的双制表符有什么建议吗?

use*_*317 5

不要在 javascript 中更改换行符<br>,而是在 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)
}
Run Code Online (Sandbox Code Playgroud)