我有一个文字段落。
我想用div包装每一行。
例如,如果文本字符串看起来像这样
Lorem ipsum dolor sit amet,
consectetur adipiscing elit.
Nam eget lectus porta metus aliquam tincidunt sed vel enim.
然后我想像这样包装它
<div>Lorem ipsum dolor sit amet,</div>
<div>consectetur adipiscing elit.</div>
<div><br/></div>
<div>Nam eget lectus porta metus aliquam tincidunt sed vel enim.</div>
有人可以告诉我什么是正确的方法吗?
由于
答案 0 :(得分:2)
您可以使用bytes.Buffer
和bufio.NewScanner
,例如此工作示例代码:
package main
import "fmt"
import "strings"
import "bufio"
import "bytes"
func main() {
r := strings.NewReader(`Lorem ipsum dolor sit amet,
consectetur adipiscing elit.
Nam eget lectus porta metus aliquam tincidunt sed vel enim.`)
buf := &bytes.Buffer{}
scanner := bufio.NewScanner(r)
for scanner.Scan() {
s := scanner.Text()
if len(s) == 0 {
s = `<br/>`
}
buf.WriteString(`<div>` + s + `</div>
`)
}
fmt.Println(buf.String())
}
输出:
<div>Lorem ipsum dolor sit amet,</div>
<div>consectetur adipiscing elit.</div>
<div><br/></div>
<div>Nam eget lectus porta metus aliquam tincidunt sed vel enim.</div>
您可以使用bytes.Buffer
和html/template
,
但是你有<div></div>
而不是<div><br/></div>
,那么你可以使用
s = strings.Replace(s, `<div></div>`, `<div><br/></div>`, -1)
就像这个工作示例代码:
package main
import "fmt"
import "bytes"
import "html/template"
import "strings"
func main() {
r := []string{`Lorem ipsum dolor sit amet,`,
`consectetur adipiscing elit.`,
``,
`Nam eget lectus porta metus aliquam tincidunt sed vel enim.`}
buf := &bytes.Buffer{}
t := template.Must(template.New("template").Parse("{{range .}}<div>{{.}}</div>\n{{end}}"))
t.Execute(buf, r)
s := buf.String()
s = strings.Replace(s, `<div></div>`, `<div><br/></div>`, -1)
fmt.Println(s)
}
输出:
<div>Lorem ipsum dolor sit amet,</div>
<div>consectetur adipiscing elit.</div>
<div><br/></div>
<div>Nam eget lectus porta metus aliquam tincidunt sed vel enim.</div>
答案 1 :(得分:1)
对于从一片行生成HTML片段的部分,您应该使用以下代码,该代码负责正确转义HTML。
package main
import (
"html/template"
"os"
)
func main() {
data := []string{
"first",
"second",
"<style>body{background-color:lime;}</style>",
"<script>alert('evil')</script>",
}
htmlTemplate := "{{range .}}<div>{{.}}</div>\n{{end}}"
tmpl := template.Must(template.New("").Parse(htmlTemplate))
tmpl.Execute(os.Stdout, data)
}