英文:
How can I unescape a url's host?
问题
我有以下要处理的URL:
http://shitenonions%2elibsyn%2ecom/rss
当我尝试在Go中创建一个URL时,出现了以下错误:
panic: parse http://shitenonions%2elibsyn%2ecom/rss: hexadecimal escape in host
我该如何修复这个URL,以便可以正确解析?我有一组大量的URL,其中几个URL都有这个问题。
我考虑过对URL进行解码,但我担心如果这样做,除了主机名之外的部分可能会解码错误。
英文:
I have the following URL I'm trying to process:
http://shitenonions%2elibsyn%2ecom/rss
When I try to create a url out of it in Go, I get the following error:
panic: parse http://shitenonions%2elibsyn%2ecom/rss: hexadecimal escape in host
How can I fix this URL so it can be parsed correctly? I have a large set of URLs and several of them have this problem.
I thought about URL decoding it, but I'm worried that if I do that, it might be incorrect to url decode items besides the host name.
答案1
得分: 2
你可以使用url.QueryUnescape
函数将实体%hh
解码为字符:
package main
import (
"fmt"
"net/url"
"strings"
)
func fixHost(link string) string {
if strings.HasPrefix(link, "http://") {
p := strings.Index(link[7:], "/")
if -1 != p {
host, _ := url.QueryUnescape(link[7:7+p])
return "http://" + host + link[7+p:]
}
}
return link
}
func main() {
fmt.Println(fixHost("http://shitenonions%2elibsyn%2ecom/rss"))
}
这段代码使用了url.QueryUnescape
函数来将实体%hh
解码为字符。在fixHost
函数中,如果链接以http://
开头,它会找到第一个斜杠的位置,并使用url.QueryUnescape
解码主机部分。然后,它将解码后的主机部分与原始链接的剩余部分拼接起来,并返回修复后的链接。在main
函数中,我们调用fixHost
函数并打印结果。
英文:
You can use url.QueryUnescape
to decode entities %hh
back to the characters:
package main
import (
"fmt"
"net/url"
"strings"
)
func fixHost(link string) string {
if strings.HasPrefix(link, "http://") {
p := strings.Index(link[7:], "/")
if -1 != p {
host, _ := url.QueryUnescape(link[7:7+p])
return "http://" + host + link[7+p:]
}
}
return link
}
func main() {
fmt.Println(fixHost("http://shitenonions%2elibsyn%2ecom/rss"))
}
通过集体智慧和协作来改善编程学习和解决问题的方式。致力于成为全球开发者共同参与的知识库,让每个人都能够通过互相帮助和分享经验来进步。
评论