替换URI.escape,避免LintUriEscapeUnescape警告?

问题描述 投票:3回答:1

不知道如何解决 Rubocop的 LintUriEscapeUnescape 警告

尝试更换 URICGI 以为那是 "drop in "的替换,但那把测试套件给毁了。

下面是错误,后面是一行代码,其中 URI 正在使用。

app/models/media_file.rb:76:5: W: Lint/UriEscapeUnescape: URI.escape method is obsolete and should not be used. Instead, use CGI.escape, URI.encode_www_form or URI.encode_www_form_component depending on your specific use case.
    URI ...
    ^^^

    # app/models/media_file.rb
    ...
    def cdn_url(format: nil)
    if format.nil?
      "#{s3_config.cloudfront_endpoint}/#{escape_url(key)}"
    elsif converted_urls.with_indifferent_access[format.to_s]
      filename = converted_urls.with_indifferent_access[format.to_s]
      if URI.parse(escape_url(filename)).host
        filename
      else
        "#{s3_config.cloudfront_endpoint}/#{escape_url(filename)}"
      end
    else
      converted(url)
    end
  end
...
  private

  def escape_url(url)
    URI
      .escape(url)
      .gsub(/\(/, '%28')
      .gsub(/\)/, '%29')
      .gsub(/\[/, '%5B')
      .gsub(/\]/, '%5D')
  end

EDIT: 增加了用以下方法转义的字符串的输出示例 URICGI:

            url: images/medium/test-image.jpg
URI.escape(url): images/medium/test-image.jpg
CGI.escape(url): images%2Fmedium%2Ftest-image.jpg

            url: images/medium/test-image.jpg
URI.escape(url): images/medium/test-image.jpg
CGI.escape(url): images%2Fmedium%2Ftest-image.jpg

看来是这样 CGI 并不能代替 URI 列表错误可能让你相信。有什么想法?

ruby-on-rails ruby urlencode lint rubocop
1个回答
0
投票

遇到了同样的问题,通过使用 可寻址 lib.

escaped_query = URI.escape(search,
            Regexp.new("[^#{URI::PATTERN::UNRESERVED}]"))

#W: Lint/UriEscapeUnescape: URI.escape method is obsolete and should not be used. Instead, use CGI.escape, URI.encode_www_form or URI.encode_www_form_component depending on your specific use case.

解决的。

  • 创业板 addressable 蕴藏 gemspecGemfile.
gem 'addressable', '~> 2.7'
  • 要求 addressable/uri

  • 适当增加。

escaped_query = Addressable::URI.encode_component(search, Addressable::URI::CharacterClasses::QUERY)

© www.soinside.com 2019 - 2024. All rights reserved.