如何通过io.Reader转换HTML实体

问题描述 投票:2回答:2

[我的Go程序发出HTTP请求,其响应主体为大型JSON文档,其字符串将与号字符&编码为&(可能是由于某些Microsoft平台的怪癖?)。我的程序需要以与json.Decoder兼容的方式将那些实体转换回&字符。

示例响应如下所示:

json.Decoder

其对应对象如下:

{"name":"A&B","comment":"foo&bar"}

这些文档具有各种形状,因此在解码后转换HTML实体是不可行的。理想情况下,可以通过将响应正文阅读器包装在另一个执行转换的阅读器中来完成。

是否有一种简单的方法可以将pkg.Object{Name:"A&B", Comment:"foo&bar"} 包装在某些http.Response.Body中,用io.ReadCloser替换&的所有实例(或者在一般情况下,将任何字符串X替换为字符串Y?

我怀疑&可以实现,但没有立即看到。特别是,我担心实体跨越多个字节的边缘情况。也就是说,例如,一个批次以x/text/transform结束,而下一个批次以x/text/transform开头。是否有一些库或惯用语可以很好地处理这种情况?

我的Go程序发出HTTP请求,其响应主体是大型JSON文档,其字符串将&字符编码为&和&(可能是由于某些Microsoft平台的怪癖?)。我的...

go streaming transformation html-entities
2个回答
1
投票

您需要创建一个替换字符的&am


1
投票

如果您不想依赖var input = strings.NewReader(`{"name":"A&B","comment":"foo&bar"}`) r := transform.NewReader(input, &simpleTransformer{[]byte(`&`), []byte(`&`)}) io.Copy(os.Stdout, r) // Instead of io.Copy, use the JSON decoder to read from `r` 这样的外部程序包,则可以编写自定义{"name":"A&B","comment":"foo&bar"} 包装器。

© www.soinside.com 2019 - 2024. All rights reserved.