我正在使用github.com/labstack/echo
framefork,当我从 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
}