代码一
s = "[a1111][b22222][v4321342]"
s.gsub(/\[\w(\d+)\]/) do
$1
end
结果
=> "1111222224321342"
代码二
s = ERB::Util.html_escape("[a1111][b22222][v4321342]")
s.gsub(/\[\w(\d+)\]/) do
$1
end
结果
=> "432134243213424321342"
怎么样,很不一样哈
一开始想 html_escape 就是转换几个字符,怎么会出现这样的情况,仔细查看之后 发现 html_escape 返回的是 SafeBuffer 对象,就是这个 SafeBuffer 导致的这个问题, 使用 to_s 还不行,原来 SafeBuffer 重写了 to_s
def to_s
self
end
好吧,就用 to_str 吧
s = ERB::Util.html_escape(“[a1111][b22222][v4321342]“).to_str s.gsub(/[\w(\d+)]/) do $1 end
SafeBuffer 为什么会这样呢? 在 Rails 的 bug,还是 feature