我如何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)
我看了很多关于互联网的事情并没有找到(或者更可能错过)一种方法来做到这一点,虽然我几乎肯定我前几天毫无困难地做了这件事.
谢谢!
我该如何改造?
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吗?
如果我在Rails中的RHTML视图中,很容易URL转义:
<a href="/redirect?href=<%=u target %>">Foo</a>
Run Code Online (Sandbox Code Playgroud)
我如何在字符串中执行此操作?我想做这样的事情:
<% redirect_href = "/redirect?#{url_escape target}&foo=bar&baz=some_other_stuff" -%>
<a href="<%= redirect_href =>">Foo</a>
Run Code Online (Sandbox Code Playgroud)
这一定是微不足道的吧?
我正在尝试用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) 在使用OpenURI之前,如何编码或"转义"URL open(url)?
我们使用OpenURI打开远程URL并返回xml:
getresult = open(url).read
Run Code Online (Sandbox Code Playgroud)
问题是URL包含一些用户输入文本,其中包含空格和其他字符,包括"+","&","?"等可能,因此我们需要安全地转义URL.我在使用Net :: HTTP时看到了很多例子,但是没有为OpenURI找到任何例子.
我们还需要能够解析我们在会话变量中收到的类似字符串,因此我们需要倒数函数.
为什么不URI.escape逃避单引号?
URI.escape("foo'bar\" baz")
=> "foo'bar%22%20baz"
Run Code Online (Sandbox Code Playgroud) 如果我有这个参数添加到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?
我正在使用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.escape和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"
Run Code Online (Sandbox Code Playgroud)
这些轻微编码差异的结果 - html 页面,其中空格被替换为+. 我的问题是 -URI.encode这个用例有什么好的替代品?
我正在使用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 版本的错误解决方案
我从捆绑器中收到了一个我从未见过的奇怪错误。在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 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
ruby ×10
urlencode ×4
uri ×3
url ×2
bundler ×1
decode ×1
encode ×1
escaping ×1
javascript ×1
open-uri ×1
quickbooks ×1
rubygems ×1
spotify ×1
string ×1
url-encoding ×1