gpt4 book ai didi

ruby - 为什么 URI.escape() 被标记为过时,这个 REGEXP::UNSAFE 常量在哪里?

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

我试图弄清楚 ruby​​ 2.2.3 中 URI.escape 的默认不安全字符集是什么。 docs说:

By default uses REGEXP::UNSAFE

但是我在 URI 模块中的任何地方都找不到那个常量。

此外,this code (下面的片段)自 2009 年以来将 escape/unescape 方法标记为“过时”。为什么它们已过时?

lib/uri/common.rb:97

def escape(*arg)
warn "#{caller(1)[0]}: warning: URI.escape is obsolete" if $VERBOSE
DEFAULT_PARSER.escape(*arg)
end

文档是否错误/已过时?

最佳答案

我看到你回答了你的问题:UNSAFE。关于这个问题:

Additionally, this code has the escape / unescape methods marked as 'obsolete' since 2009. Why are they obsolete?

2010 年 12 月的这一期有一些背景:https://bugs.ruby-lang.org/issues/4167在那个线程中,Yui Naruse 写道:

URI lib says it refers RFC2396, so current behavior is correct in its spec.

Yes, I know current behavior is not what you expect. So we plan to change the lib to refer RFC3986.

Moreover current URI.encode is simple gsub. But I think it should split a URI to components, then escape each components, and finally join them.

So current URI.encode is considered harmful and deprecated. This will be removed or change behavior drastically.

What is the replacement at this time?

正如我上面所说,当前的 URI.encode 在规范级别上是错误的。所以我们 不会提供确切的替代品。更换将因它而异 用例。

我们认为大多数用例是从连接的 URI 生成转义的 URI 组件。为此,人们应该使用 URI.join 或 URI.encode_www_form;你应该在加入之前转义每个组件 他们。

关于ruby - 为什么 URI.escape() 被标记为过时,这个 REGEXP::UNSAFE 常量在哪里?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/34274838/

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