1

我正在使用github.com/labstack/echoframefork,当我从 FE 中检索数据时multipart/form-data,字符串包含作为 CRLF 的换行符,但是在计算字符串长度时会出现问题,因为 CRLF 计为 2 个符号(使用utf8.RuneCountInString),这会导致验证出现问题使用 ( github.com/go-playground/validator)。我的前端也在计算 a 中的符号并对其进行验证,但是在 FE 字符串上有一个 LF 换行符,它会自动转换为 CRLF multipart/form-data(按规范)

github.com/labstack/echo有一种使用 [CustomBinder] (https://echo.labstack.com/guide/request/#custom-binder )的方法,但我不知道如何使用它来将 CRLF 转换为 LF,因为有很多处理程序和不同的数据结构。

处理程序示例:

func handler(ctx echo.Context) error {
    var data struct {
        SomeField string `validate:"max=512"`
        // a set of other fields
    }

    if err := ctx.Bind(&data); err != nil {
        panic(err)
    }

    if err := ctx.Validate(data); err != nil {
        panic(err)
    }

    utf8.RuneCountInString(data.SomeField) // counts \r\n as 2 symbols
}

自定义绑定器示例:

type CustomBinder struct {}

func (cb *CustomBinder) Bind(i interface{}, c echo.Context) (err error) {
    // You may use default binder
    db := new(echo.DefaultBinder)
    if err = db.Bind(i, c); err != echo.ErrUnsupportedMediaType {
        return
    }

    // How to convert `CRLF` in all strings in `i` which is interface to `LF`?

    return
}
4

0 回答 0