В моей строке есть специальные символы, а вывод http / template добавляет к ней «(MISSING)» - PullRequest
0 голосов
/ 05 мая 2018

Я пытаюсь создать небольшой сайт, я использую HTML / шаблон для создания динамических страниц. Одна вещь на страницах - это список URL внутри этих URL, иногда мне нужно кодирование символов. для специальных символов, таких как ô (% C3% B4).

Когда я пытаюсь проанализировать переменные на странице, используя html / template, я получаю в результате следующее:%! 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
}

1 Ответ

0 голосов
/ 05 мая 2018

@ Моше Рева спасибо за помощь, пока что нашел ошибку

Позже в коде я отправляю сгенерированную страницу http-клиенту с

fmt.Fprintf(w, page) // Here was the error b/c of the % symbols

Я просто изменил его на

fmt.Fprint(w, page)

и работает отлично

...