2 回答

TA貢獻1895條經驗 獲得超7個贊
您只需要使用其中一個轉義函數:
package main
import "net/url"
func main() {
s := "http://test.test"
{
t := url.PathEscape(s)
println(t == "http:%2F%2Ftest.test")
}
{
t := url.QueryEscape(s)
println(t == "http%3A%2F%2Ftest.test")
}
}
https://golang.org/pkg/net/url#PathEscape
https://golang.org/pkg/net/url#QueryEscape

TA貢獻1793條經驗 獲得超6個贊
如果您能夠將 URL 編碼的 URL 作為路徑變量傳遞給 Golang 服務器,則可以通過 運行它。url.PathUnescape(str)
如果問題是您的路由器由于路徑變量中的字符未正確匹配而未到達正確的處理程序,則可能是您錯誤地定義了該路徑匹配器。我沒有狂歡的經驗,但是對于(github.com/gorilla/mux),我希望它看起來像下面這樣:mux
package main
import (
"net/http"
"net/url"
"github.com/gorilla/mux"
)
func main() {
r := mux.NewRouter()
r.HandleFunc("/properties/configurations/app.url/{nestedURL:.*}", myHandler)
http.ListenAndServe(":8080", r)
}
func myHandler(w http.ResponseWriter, r *http.Request){
nestedURL := mux.Vars(r)["nestedURL"]
unescapedPath, err := url.PathUnescape(nestedURL)
if err != nil {
// handle err
}
}
上面的示例甚至可能不需要您對嵌套URL進行URL編碼(但我確實建議您對其進行URL編碼)。
- 2 回答
- 0 關注
- 235 瀏覽
添加回答
舉報