我在用着URI.encode
生成 HTML 数据 URL:
visit "data:text/html,#{URI::encode(html)}"
升级到 Ruby 2.7.1 后,解释器开始警告:
warning: URI.escape is obsolete
推荐的替代品是CGI.escape
and URI.encode_www_form_component
。然而,他们并没有做同样的事情:
2.7.1 :007 > URI.escape '<html>this and that</html>'
(irb):7: warning: URI.escape is obsolete
=> "%3Chtml%3Ethis%20and%20that%3C/html%3E"
2.7.1 :008 > CGI.escape '<html>this and that</html>'
=> "%3Chtml%3Ethis+and+that%3C%2Fhtml%3E"
2.7.1 :009 > URI.encode_www_form_component '<html>this and that</html>'
=> "%3Chtml%3Ethis+and+that%3C%2Fhtml%3E"
这些轻微编码差异的结果 - html 页面中的空格被替换为+
。我的问题是 - 有什么好的替代品URI.encode
对于这个用例?
事实上,替换率有所下降。
s = '<html>this and that</html>'
p = URI::Parser.new
p.escape(s)
=> "%3Chtml%3Ethis%20and%20that%3C/html%3E"
Docs: https://docs.w3cub.com/ruby~3/uri/rfc2396_parser https://docs.w3cub.com/ruby%7E3/uri/rfc2396_parser
通过这篇文章下的评论找到了这个https://docs.knapsackpro.com/2020/uri-escape-is-obsolete-percent-encoding-your-query-string https://docs.knapsackpro.com/2020/uri-escape-is-obsolete-percent-encoding-your-query-string
还针对我的设置中的其他一些字符串进行了测试,这似乎也以相同的方式保留逗号URI.escape
确实,相比之下ERB::Util.url_encode
.
NOTE:由于这个答案现在变得如此受欢迎,可能值得一提的是,您不应该盲目更改您的代码以使用URI::Parser
除非您确定您的项目不需要符合标准的编码器。作为URI.escape
实际上是由于某种原因被弃用。所以在简单地切换到之前URI::Parser
确保您已阅读并理解https://stackoverflow.com/a/13059657/6376353 https://stackoverflow.com/a/13059657/6376353
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)