Home > Article > Backend Development > How to prevent '+' from escaping in go-echo
php editor Xigua will introduce to you how to prevent " " from escaping in go-echo. In the Go language, the common way to connect strings is to use " ", but when the string contains " ", the compiler will interpret it as an operator instead of a string concatenation operator, resulting in an error in string concatenation. In order to solve this problem, you can use the `url.QueryEscape` function to escape the special characters in the string to ensure the correctness of the string connection. In this way, we can effectively prevent " " escape problems in go-echo and improve the reliability and stability of the code.
I am using https://github.com/labstack/echo in one of my projects. I'm using c.queryparam
to parse query parameters and their values. One of the values contains
symbols and converts them to space characters (which is correct). However, I want to preserve the
characters in the value.
For example: http://localhost:8080?param=test test
fmt.Println(c.QueryParam("param"))
Now it outputs test test
. However, I expect the output to be test test
. Is this possible using c.queryparam
?
You can write a custom helper function as shown below -
func CustomQueryParam(c echo.Context, name string) string { qParams := make(map[string]string) for _, singleQueryParamStr := range strings.Split(c.QueryString(), "&") { val := strings.Split(singleQueryParamStr, "=") qParams[val[0]] = val[1] } return qParams[name] } func TestGet(c echo.Context) error { param := CustomQueryParam(c, "param") fmt.Println(param) return c.JSON(http.StatusOK, map[string]interface{}{ "message": "request is successful", }) }
Now the output is as you would expect. It prints test test
. But what does customqueryparam
actually do?
Okay, let’s explore this insight. Assume, the api call is -
http://localhost:8080?param=test1 test2&param2=test3
customqueryparam
The function will take the echo.context
instance and query parameter name as function parameters.
Then, within the for loop, the entire query string (i.e. param=test1 test2&param2=test3
in our case) is &
split and stored into In the string slice created by the query parameter string ([]string{"param=test1 test2", "param2=test3"}
).
After that, we iterate over each query parameter string and split it again into a string slice of two values, with the first value as the parameter name and the second value as the parameter value. For example, for the first query parameter string, the result output is as follows -
"param=test1 test2"
=> []string{"param", "test1 test2"}
Then, the first value (parameter name) is specified as the map key, and the second value (parameter value) is specified as the map value.
After completing the above process for each query string, the mapping value corresponding to the query parameter name (that is, the parameter of the function) will be returned.
An interesting fact about this custom function is that it returns an empty string if the query parameter is not found.
The above is the detailed content of How to prevent '+' from escaping in go-echo. For more information, please follow other related articles on the PHP Chinese website!