Rails rails 一个字符串栏位最大长度的问题

linjunhalida · 2012年01月31日 · 最后由 linjunhalida 回复于 2012年02月04日 · 4265 次阅读

我遇到了一个很恶心的问题。这个问题应该比较通用,大家可能遇到过。

一个 textarea 栏位,我限制了长度是 256, 在 model 里面写:

validates_length_of :text, maximum: 256

然后浏览器端验证采用:

<textarea maxlength="256"> 以及结合$('#object_text').val().length 判断。

问题就是,浏览器端判断长度的时候,回车是一个字符,但是 form post 到服务器上面,就变成了 2 个字符:\r\n 于是造成了服务器和浏览器端验证不同步的问题。

我可以在服务器端处理\r\n, 但是这个问题是否有更好的方式来进行?以及\r\n是否是标准的 form 处理回车的方式?还是只是我这边设置哪里有问题?

请有遇到的同学帮忙回复一下。

遇到过,但似乎没有太合适的解决方法(后来 client 端用了另一个值)。

更恶心的是,有些 richtext editor 还会加

什么的,就更麻烦了。

Unix 系统里,每行结尾只有“<换行>”,即“\n”;Windows 系统里面,每行结尾是“<回车><换行>”,即“\r\n”;Mac 系统里,每行结尾是“<回车>”。 应该不是设置问题。

https://github.com/rgrove/sanitize/ 这个可以去除 html 标签,不过\r\n估计还是要自己动手啦。

gem "auto_strip_attributes", "~> 1.0"

class Topic < ActiveRecord::Base
  auto_strip_attributes :subject, :content
end

恩,按照 quake 提示的这个插件,写了一下 filter, 算是把这个问题解决了。

加了一个文件:config/initializers/auto_strip_attributes.rb

AutoStripAttributes::Config.setup do
  set_filter :strip_return => false do |value|
    value.gsub "\r\n", "\n"
  end
end
class Topic < ActiveRecord::Base
  auto_strip_attributes :subject, :content, strip_return: true
end

需要 登录 后方可回复, 如果你还没有账号请 注册新账号