如何在Golang中将每一行用div包装起来?

huangapple go评论109阅读模式
英文:

How to wrap each line with a div in Golang?

问题

我有一个文本段落。

我想要用一个 div 标签包裹每一行。

例如,如果文本字符串看起来像这样:

  1. Lorem ipsum dolor sit amet,
  2. consectetur adipiscing elit.
  3. Nam eget lectus porta metus aliquam tincidunt sed vel enim.

那么我想要像这样包裹它:

  1. <div>Lorem ipsum dolor sit amet,</div>
  2. <div>consectetur adipiscing elit.</div>
  3. <div><br/></div>
  4. <div>Nam eget lectus porta metus aliquam tincidunt sed vel enim.</div>

有人可以告诉我正确的方法吗?

谢谢

英文:

I have a text paragraph.

I would like to wrap each line with a div.

For example if the text string looks like this

  1. Lorem ipsum dolor sit amet,
  2. consectetur adipiscing elit.
  3. Nam eget lectus porta metus aliquam tincidunt sed vel enim.

Then I would like to wrap it like this

  1. <div>Lorem ipsum dolor sit amet,</div>
  2. <div>consectetur adipiscing elit.</div>
  3. <div><br/></div>
  4. <div>Nam eget lectus porta metus aliquam tincidunt sed vel enim.</div>

Can someone tell me what is the proper way?

Thanks

答案1

得分: 2

你可以使用bytes.Bufferbufio.NewScanner,像下面这个工作示例代码一样:

  1. package main
  2. import "fmt"
  3. import "strings"
  4. import "bufio"
  5. import "bytes"
  6. func main() {
  7. r := strings.NewReader(`Lorem ipsum dolor sit amet,
  8. consectetur adipiscing elit.
  9. Nam eget lectus porta metus aliquam tincidunt sed vel enim.`)
  10. buf := &bytes.Buffer{}
  11. scanner := bufio.NewScanner(r)
  12. for scanner.Scan() {
  13. s := scanner.Text()
  14. if len(s) == 0 {
  15. s = `<br/>`
  16. }
  17. buf.WriteString(`<div>` + s + `</div>
  18. `)
  19. }
  20. fmt.Println(buf.String())
  21. }

输出结果:

  1. <div>Lorem ipsum dolor sit amet,</div>
  2. <div>consectetur adipiscing elit.</div>
  3. <div><br/></div>
  4. <div>Nam eget lectus porta metus aliquam tincidunt sed vel enim.</div>

你可以使用bytes.Bufferhtml/template,但是你需要将<div></div>替换为<div><br/></div>,可以使用以下工作示例代码:

  1. package main
  2. import "fmt"
  3. import "bytes"
  4. import "html/template"
  5. import "strings"
  6. func main() {
  7. r := []string{`Lorem ipsum dolor sit amet,`,
  8. `consectetur adipiscing elit.`,
  9. ``,
  10. `Nam eget lectus porta metus aliquam tincidunt sed vel enim.`}
  11. buf := &bytes.Buffer{}
  12. t := template.Must(template.New("template").Parse("{{range .}}<div>{{.}}</div>\n{{end}}"))
  13. t.Execute(buf, r)
  14. s := buf.String()
  15. s = strings.Replace(s, `<div></div>`, `<div><br/></div>`, -1)
  16. fmt.Println(s)
  17. }

输出结果:

  1. <div>Lorem ipsum dolor sit amet,</div>
  2. <div>consectetur adipiscing elit.</div>
  3. <div><br/></div>
  4. <div>Nam eget lectus porta metus aliquam tincidunt sed vel enim.</div>
英文:

You may use bytes.Buffer and bufio.NewScanner, like this working sample code:

<!-- language: lang-golang -->

  1. package main
  2. import &quot;fmt&quot;
  3. import &quot;strings&quot;
  4. import &quot;bufio&quot;
  5. import &quot;bytes&quot;
  6. func main() {
  7. r := strings.NewReader(`Lorem ipsum dolor sit amet,
  8. consectetur adipiscing elit.
  9. Nam eget lectus porta metus aliquam tincidunt sed vel enim.`)
  10. buf := &amp;bytes.Buffer{}
  11. scanner := bufio.NewScanner(r)
  12. for scanner.Scan() {
  13. s := scanner.Text()
  14. if len(s) == 0 {
  15. s = `&lt;br/&gt;`
  16. }
  17. buf.WriteString(`&lt;div&gt;` + s + `&lt;/div&gt;
  18. `)
  19. }
  20. fmt.Println(buf.String())
  21. }

output:

  1. &lt;div&gt;Lorem ipsum dolor sit amet,&lt;/div&gt;
  2. &lt;div&gt;consectetur adipiscing elit.&lt;/div&gt;
  3. &lt;div&gt;&lt;br/&gt;&lt;/div&gt;
  4. &lt;div&gt;Nam eget lectus porta metus aliquam tincidunt sed vel enim.&lt;/div&gt;

You may use bytes.Buffer and html/template,
but you have &lt;div&gt;&lt;/div&gt; instead of &lt;div&gt;&lt;br/&gt;&lt;/div&gt;, then you may use

  1. s = strings.Replace(s, `&lt;div&gt;&lt;/div&gt;`, `&lt;div&gt;&lt;br/&gt;&lt;/div&gt;`, -1)

like this working sample code:

<!-- language: lang-golang -->

  1. package main
  2. import &quot;fmt&quot;
  3. import &quot;bytes&quot;
  4. import &quot;html/template&quot;
  5. import &quot;strings&quot;
  6. func main() {
  7. r := []string{`Lorem ipsum dolor sit amet,`,
  8. `consectetur adipiscing elit.`,
  9. ``,
  10. `Nam eget lectus porta metus aliquam tincidunt sed vel enim.`}
  11. buf := &amp;bytes.Buffer{}
  12. t := template.Must(template.New(&quot;template&quot;).Parse(&quot;{{range .}}&lt;div&gt;{{.}}&lt;/div&gt;\n{{end}}&quot;))
  13. t.Execute(buf, r)
  14. s := buf.String()
  15. s = strings.Replace(s, `&lt;div&gt;&lt;/div&gt;`, `&lt;div&gt;&lt;br/&gt;&lt;/div&gt;`, -1)
  16. fmt.Println(s)
  17. }

output:

  1. &lt;div&gt;Lorem ipsum dolor sit amet,&lt;/div&gt;
  2. &lt;div&gt;consectetur adipiscing elit.&lt;/div&gt;
  3. &lt;div&gt;&lt;br/&gt;&lt;/div&gt;
  4. &lt;div&gt;Nam eget lectus porta metus aliquam tincidunt sed vel enim.&lt;/div&gt;

答案2

得分: 1

生成HTML片段的代码如下所示,它会正确转义HTML内容:

  1. package main
  2. import (
  3. "html/template"
  4. "os"
  5. )
  6. func main() {
  7. data := []string{
  8. "first",
  9. "second",
  10. "<style>body{background-color:lime;}</style>",
  11. "<script>alert('evil')</script>",
  12. }
  13. htmlTemplate := "{{range .}}<div>{{.}}</div>\n{{end}}"
  14. tmpl := template.Must(template.New("").Parse(htmlTemplate))
  15. tmpl.Execute(os.Stdout, data)
  16. }

请注意,这是一个Go语言的代码示例,用于生成HTML片段。

英文:

For the part of generating the HTML snippet from a slice of lines, you should use the following code, which takes care of properly escaping the HTML.

  1. package main
  2. import (
  3. &quot;html/template&quot;
  4. &quot;os&quot;
  5. )
  6. func main() {
  7. data := []string{
  8. &quot;first&quot;,
  9. &quot;second&quot;,
  10. &quot;&lt;style&gt;body{background-color:lime;}&lt;/style&gt;&quot;,
  11. &quot;&lt;script&gt;alert(&#39;evil&#39;)&lt;/script&gt;&quot;,
  12. }
  13. htmlTemplate := &quot;{{range .}}&lt;div&gt;{{.}}&lt;/div&gt;\n{{end}}&quot;
  14. tmpl := template.Must(template.New(&quot;&quot;).Parse(htmlTemplate))
  15. tmpl.Execute(os.Stdout, data)
  16. }

huangapple
  • 本文由 发表于 2016年8月23日 03:40:35
  • 转载请务必保留本文链接:https://go.coder-hub.com/39087469.html
匿名

发表评论

匿名网友

:?: :razz: :sad: :evil: :!: :smile: :oops: :grin: :eek: :shock: :???: :cool: :lol: :mad: :twisted: :roll: :wink: :idea: :arrow: :neutral: :cry: :mrgreen:

确定