gpt4 book ai didi

html - 为什么在 Rails 2 中对撇号进行 HTML 编码会产生意想不到的结果?

转载 作者:数据小太阳 更新时间:2023-10-29 08:19:14 24 4
gpt4 key购买 nike

我正在使用 h 对 Rails 2 中的一些文本进行 HTML 编码,但我遇到了撇号问题。更准确地说,我发现我的撇号最终变成了 ',这显然不是我想要显示的。

有人知道为什么会这样吗?我的研究表明 HTML 编码不应影响撇号。

最佳答案

这是一个有趣的问题。我发现 h AKA html_escape 处理撇号 AKA "'" 的方式不一致。

根据 ERB::Util 的 RDoc 2.6.6:

ESCAPE_TABLE = { '&'=>'&amp;', '<'=>'&lt;', '>'=>'&gt;', '"'=>'&quot;', "'"=>'&#039;', }

gem list erubis
*** LOCAL GEMS ***
erubis (2.6.6)

在 IRB 中我看到:

Welcome to IRB. You are using ruby 1.9.2p136 (2010-12-25 revision 30365) [x86_64-darwin10.5.0]. Have fun ;)
>> require 'erb' #=> true
>> ERB::Util.html_escape("foo'bar") #=> "foo'bar"
>> ERB::Util.html_escape('foo"bar') #=> "foo&quot;bar"

编辑:

嘿,这是 h 方法中的错误,或者至少是不一致。这是来源:

# File 'lib/erubis/helpers/rails_helper.rb', line 342

def h(value)
value.to_s.gsub(/[&<>"]/) {|s| ESCAPE_TABLE[s] }
end

请注意传递给 gsub 的字符串不包含 "'"?这意味着不会为单引号/撇号调用对 ESCAPE_TABLE 的查找。

而且,我们都知道 cookies 的症结在于撇号。 :-)

我希望如果我在您的 Rails 版本中查看 hhtml_escape 的定义,我们会发现该字符串中包含撇号。

解决方法是升级您的 ERB/Erubis,或者覆盖 h/html_escape 定义以使其正确。您可以使用上面的定义作为起点。

关于html - 为什么在 Rails 2 中对撇号进行 HTML 编码会产生意想不到的结果?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/4899391/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com