什么是编码和解码围棋整个URL的推荐的方法? 我知道的方法url.QueryEscape
和url.QueryUnescape
,但他们似乎并没有被正是我期待的。 具体来说,我正在寻找像JavaScript的方法encodeURIComponent
和decodeURIComponent
。
谢谢。
什么是编码和解码围棋整个URL的推荐的方法? 我知道的方法url.QueryEscape
和url.QueryUnescape
,但他们似乎并没有被正是我期待的。 具体来说,我正在寻找像JavaScript的方法encodeURIComponent
和decodeURIComponent
。
谢谢。
你可以做你想要与所有的URL编码网/ URL模块。 它没有打出去的URL的部分的独立编码功能,你必须让它构建整个URL。 在源代码中有过一眯,我认为它确实非常好,符合标准的工作。
下面是一个例子( 操场链路 )
package main
import (
"fmt"
"net/url"
)
func main() {
var Url *url.URL
Url, err := url.Parse("http://www.example.com")
if err != nil {
panic("boom")
}
Url.Path += "/some/path/or/other_with_funny_characters?_or_not/"
parameters := url.Values{}
parameters.Add("hello", "42")
parameters.Add("hello", "54")
parameters.Add("vegetable", "potato")
Url.RawQuery = parameters.Encode()
fmt.Printf("Encoded URL is %q\n", Url.String())
}
它打印
Encoded URL is "http://www.example.com/some/path/or/other_with_funny_characters%3F_or_not/?vegetable=potato&hello=42&hello=54"
从MDN上encodeURIComponent方法 :
encodeURIComponent方法逃避所有字符,除了以下几点:字母,十进制数字,
'-', '_', '.', '!', '~', '*', ''', '(', ')'
从围棋的实现url.QueryEscape的 (具体而言, shouldEscape
私有函数),脱除了以下的所有字符:字母,十进制数字, '-', '_', '.', '~'
。
不同于使用Javascript,Go的QueryEscape() 将难逃'!', '*', ''', '(', ')'
。 基本上,Go的版本是严格RFC-3986标准。 JavaScript的是宽松的。 再从MDN:
如果希望更加严格的遵守RFC 3986(!其储备,”,(,)和*),尽管这些字符都没有正式划定URI用途,以下可以安全使用:
function fixedEncodeURIComponent (str) {
return encodeURIComponent(str).replace(/[!'()]/g, escape).replace(/\*/g, "%2A");
}
这个怎么样:
template.URLQueryEscaper(path)
对于模仿JavaScript的encodeURIComponent()
我创建了一个字符串辅助函数。
例如:打开"My String"
到"My%20String"
https://github.com/mrap/stringutil/blob/master/urlencode.go
import "net/url"
// UrlEncoded encodes a string like Javascript's encodeURIComponent()
func UrlEncoded(str string) (string, error) {
u, err := url.Parse(str)
if err != nil {
return "", err
}
return u.String(), nil
}
作为围棋1.8,这种情况发生了变化。 现在,我们有机会获得PathEscape
除了老QueryEscape
编码路径组件,与UNESCAPE同行一起PathUnescape
。
如果有人想要得到确切的结果比较给JS encodeURIComponent方法试试我的功能是肮脏的,但效果很好。
https://gist.github.com/czyang/7ae30f4f625fee14cfc40c143e1b78bf
// #Warning! You Should Use this Code Carefully, and As Your Own Risk.
package main
import (
"fmt"
"net/url"
"strings"
)
/*
After hours searching, I can't find any method can get the result exact as the JS encodeURIComponent function.
In my situation I need to write a sign method which need encode the user input exact same as the JS encodeURIComponent.
This function does solved my problem.
*/
func main() {
params := url.Values{
"test_string": {"+!+'( )*-._~0-