http - 我的字符串有特殊字符,http/template 的输出添加了 "(MISSING)"

标签 http go encoding uri go-templates

我正在尝试建立一个小型网站,我使用 html/模板来创建动态页面。页面上的一件事是这些 URL 中的 URL 列表,有时我需要字符编码。对于像 ô (%C3%B4) 这样的特殊字符。

当我尝试使用 html/模板将变量解析到页面中时,我得到以下结果:%!c(MISSING)3%!b(MISSING)4。我不知道这里出了什么问题

type Search_list struct {
    Search_name  string
    Search_url   string
    Search_price float64
}

func generateSearchPage(language int, q string) (string, error) {
    /* ommited, fetshing data from elasticsrearch*/

    sl := []Search_list{}

    var urle *url.URL

    //looping through ES results and putting them in a custom List
    for _, res := range data.Hits.Hits {

        //
        //Encode Url
        var err error

        urle, err = url.Parse(res.Source.URL)

        if err != nil {
            continue
            // TODO: add log
        }

        //I've tried already the following:
        fmt.Println(res.Source.URL)                     //ô
        fmt.Println(url.QueryUnescape(res.Source.URL))  //ô
        fmt.Println(urle.String())                      //%C3%B4
        u, _ := url.QueryUnescape(res.Source.URL)


        sl = append(sl, Search_list{res.Source.Name, u, res.Source.Price})
    }

    var buffer bytes.Buffer
    t := template.New("Index template")
    t, err = t.Parse(page_layout[language][PageTypeSearch])
    if err != nil {
        panic(err)
    }
    err = t.Execute(&buffer, Search_data{
        Title:        translations[language]["homepage"],
        Page_title:   WebSiteName,
        Listed_items: sl,
    })

    if err != nil {
        panic(err)
    }

    return buffer.String(), nil  // %!c(MISSING)3%!b(MISSING)4
}

最佳答案

@摩西·雷瓦 感谢您的帮助,同时我发现了错误

稍后在代码中,我使用

将生成的页面发送到 http 客户端
fmt.Fprintf(w, page) // Here was the error b/c of the % symbols

我刚改成

fmt.Fprint(w, page)

效果很好

关于http - 我的字符串有特殊字符,http/template 的输出添加了 "(MISSING)",我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/50192433/

相关文章:

ruby-on-rails - 使用 WireShark 捕获 Rails API 请求/响应

go - 如何始终从 Go channel 获取最新值?

javascript - cookie中出现乱码

.net - 是否有用于 .NET 的 XmlEncode/XmlDecode?

php - 保存 php 文件 - 我应该使用什么编码来使用 MySQL

http - 为什么公共(public) WiFi 不支持 505 Http 版本?

php - Apache/PHP 输出缓存

java - Spring Boot 。如何测试http协议(protocol)版本?

go - Golang 优雅关闭 HTTP 需要多长时间?

go - 在 GoLand 中保存时运行 'goimports'