我正在为我的rails应用程序编写助手,它应该使用string进行一些操作,当我发现这个时。如果我在转义之后使用gsub
方法,那么这段代码就不会像我想的那样工作(它找不到数字999)。
require 'active_support/core_ext/string'
text = ">999"
text = ERB::Util.html_escape(text)
# text = text.downcase
text.gsub!(/\>\;(\d+)/) { "found [#{$1}]" }
puts text
在另一种情况下,如果我取消注释
text = text.downcase
,即对字符串应用任何方法,则所有方法都可以正常工作。那么如果我想在gsub
方法之后使用html_escape
应该怎么做呢? 最佳答案
你正在制作一个很棒的功能;试试这个:
# ...as before.
text = ERB::Util.html_escape(text)
puts text.class
text
实际上是ActiveSupport::SafeBuffer
的一个实例,它可能实现了gsub!
方法,接受一个块,但不知怎么地得到了错误的结果-因为它不会导致设置$1
。您可以通过以下任一方式解决此问题:
text = text.to_s.gsub!(...)
text = text.gsub!(...) {|match| "found [#{match}]" }
您可能会发现这种不一致在稍后版本的activesupport代码中得到了修复,但如果不是这样,您最好现在就提交bug报告;这种
gsub!
行为有很好的文档记录,应该保留下来。关于ruby-on-rails - html_escape的奇怪行为,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/9345366/