相关疑难解决方法(0)

Ruby url编码字符串

我如何URI ::编码一个字符串,如:

\x12\x34\x56\x78\x9a\xbc\xde\xf1\x23\x45\x67\x89\xab\xcd\xef\x12\x34\x56\x78\x9a
Run Code Online (Sandbox Code Playgroud)

要获得如下格式:

%124Vx%9A%BC%DE%F1%23Eg%89%AB%CD%EF%124Vx%9A
Run Code Online (Sandbox Code Playgroud)

(根据RFC 1738)

这是我尝试过的:

irb(main):123:0> URI::encode "\x12\x34\x56\x78\x9a\xbc\xde\xf1\x23\x45\x67\x89\xab\xcd\xef\x12\x34\x56\x78\x9a"
ArgumentError: invalid byte sequence in UTF-8
    from /usr/local/lib/ruby/1.9.1/uri/common.rb:219:in `gsub'
    from /usr/local/lib/ruby/1.9.1/uri/common.rb:219:in `escape'
    from /usr/local/lib/ruby/1.9.1/uri/common.rb:505:in `escape'
    from (irb):123
    from /usr/local/bin/irb:12:in `<main>'
Run Code Online (Sandbox Code Playgroud)

也,

irb(main):126:0> CGI::escape "\x12\x34\x56\x78\x9a\xbc\xde\xf1\x23\x45\x67\x89\xab\xcd\xef\x12\x34\x56\x78\x9a"
ArgumentError: invalid byte sequence in UTF-8
    from /usr/local/lib/ruby/1.9.1/cgi/util.rb:7:in `gsub'
    from /usr/local/lib/ruby/1.9.1/cgi/util.rb:7:in `escape'
    from (irb):126
    from /usr/local/bin/irb:12:in `<main>'
Run Code Online (Sandbox Code Playgroud)

我看了很多关于互联网的事情并没有找到(或者更可能错过)一种方法来做到这一点,虽然我几乎肯定我前几天毫无困难地做了这件事.

谢谢!

ruby string uri ruby-on-rails urlencode

131
推荐指数
7
解决办法
15万
查看次数

url在红宝石中的代码?

我该如何改造?

www.bestbuy.com/site/Electronics\Audio\abcat0200000.c=3fid=3dabcat0200000
Run Code Online (Sandbox Code Playgroud)

进入原来的格式?

www.bestbuy.com/site/Electronics/Audio/abcat0200000.c?id=abcat0200000
Run Code Online (Sandbox Code Playgroud)

urldecode吗?

ruby

57
推荐指数
4
解决办法
5万
查看次数

如何URL转义Rails中的字符串?

如果我在Rails中的RHTML视图中,很容易URL转义:

<a href="/redirect?href=<%=u target %>">Foo</a>
Run Code Online (Sandbox Code Playgroud)

我如何在字符串中执行此操作?我想做这样的事情:

<% redirect_href = "/redirect?#{url_escape target}&amp;foo=bar&amp;baz=some_other_stuff" -%>
<a href="<%= redirect_href =>">Foo</a>
Run Code Online (Sandbox Code Playgroud)

这一定是微不足道的吧?

url escaping ruby-on-rails

54
推荐指数
4
解决办法
5万
查看次数

为什么不decodeURI("a + b")=="a b"?

我正在尝试用Ruby编码URL并用Javascript解码它们.然而,加号角色给了我奇怪的行为.

在Ruby中:

[Dev]> CGI.escape "a b"
=> "a+b"
[Dev]> CGI.unescape "a+b"
=> "a b"
Run Code Online (Sandbox Code Playgroud)

到现在为止还挺好.但是Javascript怎么样?

>>> encodeURI("a b")
"a%20b"
>>> decodeURI("a+b")
"a+b"
Run Code Online (Sandbox Code Playgroud)

基本上我需要一种编码/解码URL的方法,这些方法在Javascript和Ruby中的工作方式相同.

编辑: decodeURIComponent不是更好:

>>> encodeURIComponent("a b")
"a%20b"
>>> decodeURIComponent("a+b")
"a+b"
Run Code Online (Sandbox Code Playgroud)

javascript ruby encode decode urlencode

21
推荐指数
2
解决办法
1万
查看次数

在Ruby/Rails中,如何编码/转义URL中的特殊字符?

在使用OpenURI之前,如何编码或"转义"URL open(url)

我们使用OpenURI打开远程URL并返回xml:

getresult = open(url).read
Run Code Online (Sandbox Code Playgroud)

问题是URL包含一些用户输入文本,其中包含空格和其他字符,包括"+","&","?"等可能,因此我们需要安全地转义URL.我在使用Net :: HTTP时看到了很多例子,但是没有为OpenURI找到任何例子.

我们还需要能够解析我们在会话变量中收到的类似字符串,因此我们需要倒数函数.

ruby open-uri urlencode

15
推荐指数
4
解决办法
5万
查看次数

为什么URI.escape不能单引号?

为什么不URI.escape逃避单引号?

URI.escape("foo'bar\" baz")
=> "foo'bar%22%20baz"
Run Code Online (Sandbox Code Playgroud)

ruby url uri

12
推荐指数
1
解决办法
4123
查看次数

如何在Rails中使用空格为'%20'而不是'+'来获取URL的参数

如果我有这个参数添加到URL

params = { name: 'John Key' }

并使用方法to_param:

params.to_param
 => "name=John+Key"
Run Code Online (Sandbox Code Playgroud)

关键是所使用的服务无法正确读取'+',而是需要'%20' name=John%20Key:何时将空间编码为加号(+)或%20?

有没有办法在没有使用的情况下使用'%20'返回参数gsub

ruby ruby-on-rails url-encoding

9
推荐指数
1
解决办法
3573
查看次数

Ruby 2.7 说 URI.escape 已过时,用什么替代它?

我正在使用URI.encode生成 HTML 数据 URL:

visit "data:text/html,#{URI::encode(html)}"
Run Code Online (Sandbox Code Playgroud)

升级到 Ruby 2.7.1 后,解释器开始警告:

warning: URI.escape is obsolete
Run Code Online (Sandbox Code Playgroud)

推荐的替代品是CGI.escapeURI.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"
Run Code Online (Sandbox Code Playgroud)

这些轻微编码差异的结果 - html 页面,其中空格被替换为+. 我的问题是 -URI.encode这个用例有什么好的替代品?

ruby

8
推荐指数
3
解决办法
1651
查看次数

URI 的未定义方法“编码​​”:使用 gem Rspotify 的模块

我正在使用gem rspotify来访问我的 Rails 应用程序中的 Spotify 的 api。Rails 版本是 6.0.4 但最重要的是 Ruby 版本是 3.0.0

当我尝试调用 api 方法时,我不断收到此错误“URI:Module 的未定义方法‘编码’”。我必须强调,当我降级到 Ruby 2.6.3 时,我没有收到此错误。Ruby 3.0.0 似乎不支持 URI 编码。我的用户控制器是下面的代码示例。我收到Spotify_user.country和其他 api 方法的错误。

class UsersController < ApplicationController
  skip_before_action :authenticate_user!, only: [ :spotify]

  def spotify
    spotify_user = RSpotify::User.new(request.env['omniauth.auth'])
    spotify_user.country
  end
end
Run Code Online (Sandbox Code Playgroud)

在config/application.rb中

RSpotify::authenticate(ENV['SPOTIFY_CLIENT_ID'], ENV['SPOTIFY_CLIENT_SECRET'])
Run Code Online (Sandbox Code Playgroud)

在 devise.rb 中,我有

require 'rspotify/oauth'

Rails.application.config.middleware.use OmniAuth::Builder do
  provider :spotify, ENV['SPOTIFY_CLIENT_ID'], ENV['SPOTIFY_CLIENT_SECRET'], scope: 
  'user-read-email playlist-modify-public user-library-read user-library-modify'
end
Run Code Online (Sandbox Code Playgroud)

我想知道是否有一个不涉及降级 ruby​​ 版本的错误解决方案

ruby uri ruby-on-rails urlencode spotify

7
推荐指数
2
解决办法
1万
查看次数

Ruby Bundler身份验证错误

我从捆绑器中收到了一个我从未见过的奇怪错误。在bundle install我得到:

Please CGI escape your usernames and passwords before setting them for authentication

这仅在一个回购中发生,我怀疑它与来自github的gem来源有关该gemfile中的几个gem有关。值得注意的是,这些获取是从而git://github.com/不是SSH获取的。不知道这是否是导致问题的原因。

在Bundlers文档中找不到与此相关的任何信息,因此非常感谢您提供任何见解或指导。

编辑(添加Gemfile):

ruby '2.2.2'


    # Bundle edge Rails instead: gem 'rails', github: 'rails/rails'
    gem 'rails', '>= 5.0.0.rc1', '< 5.1'
    # Use postgresql as the database for Active Record
    gem 'pg', '~> 0.18'
    # Use Puma as the app server
    gem 'puma', '~> 3.0'
    # Use SCSS for stylesheets
    gem 'sass-rails', '~> 5.0'
    gem 'bootstrap', '~> 4.0.0.alpha3'
    gem 'font-awesome-rails'
    # Use Uglifier …
Run Code Online (Sandbox Code Playgroud)

ruby rubygems ruby-on-rails bundler

6
推荐指数
1
解决办法
2187
查看次数

URI:Module 的未定义方法“escape”

我是一个研究 Ruby on Rails 的菜鸟。我正在尝试将 ruby​​ on Rails 应用程序集成到 Quickbooks 中。我正在按照这个视频的步骤进行操作。当我尝试按“连接到 QuickBooks”按钮进行身份验证时,我陷入了困境。

在此输入图像描述

我收到这个错误;

在此输入图像描述

我做了一些研究,发现这个错误与URI.escape()命令有关。我认为他们在 Ruby 3 中删除了它。我该如何解决这个问题?我什至不知道这个URI.escape()命令位于哪里。

这是来自vendors_controller.rb

def authenticate
    callback = oauth_callback_vendors_url
    token = $qb_oauth_consumer.get_request_token(:oauth_callback => callback)
    session[:qb_request_token] = token
    # If Rails >= 4.1 you need to do this => session[:qb_request_token] = Marshal.dump(token)   
    redirect_to("https://appcenter.intuit.com/Connect/Begin?oauth_token=#{token.token}") and return
  end

  def oauth_callback
    at = session[:qb_request_token].get_access_token(:oauth_verifier => params[:oauth_verifier])
    # If Rails >= 4.1 you need to do this =>  at = Marshal.load(session[:qb_request_token]).get_access_token(:oauth_verifier => params[:oauth_verifier])
    session[:token] …
Run Code Online (Sandbox Code Playgroud)

ruby quickbooks ruby-on-rails quickbooks-online intuit-partner-platform

5
推荐指数
2
解决办法
8190
查看次数