Home  >  Article  >  Backend Development  >  How to prevent '+' from escaping in go-echo

How to prevent '+' from escaping in go-echo

王林
王林forward
2024-02-09 08:00:30858browse

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.

Question content

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?

Solution

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!

Statement:
This article is reproduced at:stackoverflow.com. If there is any infringement, please contact admin@php.cn delete