我有一个REST服务,接受表单/ {parameter}中的参数
还有Apache2将请求转发给Web服务
<VirtualHost *:9091>
AllowEncodedSlashes NoDecode
LogLevel debug
ProxyPass /webservice balancer://api/webservice
<Proxy balancer://api>
BalancerMember http://localhost:8030
</Proxy>
</VirtualHost>
Run Code Online (Sandbox Code Playgroud)
参数可能包含编码字符,例如%2f(/)
问题是Apache再次编码这些字符,Webservice收到%252F而不是%2F
[Mon Oct 15 13:59:24 2012] [debug] mod_proxy_balancer.c(46): proxy: BALANCER: canonicalising URL //api/webservice/Interface GigabitEthernet1%2F0%2F2
[Mon Oct 15 13:59:24 2012] [debug] mod_proxy_balancer.c(581): proxy: BALANCER (balancer://api) worker (http://localhost:8030) rewritten to http://localhost:8030/Interface%20GigabitEthernet1%252F0%252F2%20Utilization
Run Code Online (Sandbox Code Playgroud)
如果我直接请求webservice,Tomcat/Jetty会处理它,并且服务会收到正确的参数.
我们如何使用C#中的URL(RFC 1738)标准对字符串进行编码?
以下在线工具使用此标准http://www.freeformatter.com/url-encoder.html转换字符串
我要转换的字符串示例是test(brackets),编码的字符串应如下所示:
test%28brackets%29
Run Code Online (Sandbox Code Playgroud) 我正在使用ruby和googles反向地理编码yql表来理想地自动化我的一些搜索查询.我遇到的问题是将查询转换为合法的网址格式.问题是我正在使用的编码是返回非法网址.我正在运行的查询如下
query="select * from google.geocoding where q='40.714224,-73.961452'"
pQuery= CGI::escape(query)
Run Code Online (Sandbox Code Playgroud)
处理后的查询的最终输出如下所示
http://query.yahooapis.com/v1/public/yql?q=select+%2A+from+google.geocoding+where+q%3D%2740.3714224%2C--73.961452%27+format=json&diagnostics=true&env=store%3A%2F%2Fdatatables.org%2Falltableswithkeys&callback=
Run Code Online (Sandbox Code Playgroud)
唉,网址是非法的.在YQL控制台中检查查询的内容时,我得到以下内容
http://query.yahooapis.com/v1/public/yql?q=select%20*%20from%20google.geocoding%20where%20q%3D%2240.714224%2C-73.961452%22&format=json&diagnostics=true&env=store%3A%2F%2Fdatatables.org%2Falltableswithkeys&callback=
Run Code Online (Sandbox Code Playgroud)
正如你可以看到:),编码完全错误.我想知道有谁知道如何生成正确的网址.
所以我正在尝试使用Rails URL帮助程序(page_url)来创建包含特殊字符的URL,包括&符号.大多数情况的工作方式与您期望的一样:
(rdb:1) page_url('foo', :host => 'host')
"http://host/pages/foo"
(rdb:1) page_url('foo_%_bar', :host => 'host')
"http://host/pages/foo_%25_bar"
Run Code Online (Sandbox Code Playgroud)
但由于一些奇怪的原因,&符号没有被转义:
(rdb:1) page_url('foo_&_bar', :host => 'host')
"http://host/pages/foo_&_bar"
Run Code Online (Sandbox Code Playgroud)
如果我预先逃脱它们,它们就会被破坏:
(rdb:1) page_url('foo_%26_bar', :host => 'host')
"http://host/pages/foo_%2526_bar"
Run Code Online (Sandbox Code Playgroud)
CGI::escape另一方面,他们逃脱了罚款:
(rdb:1) CGI::escape('foo_&_bar')
"foo_%26_bar"
Run Code Online (Sandbox Code Playgroud)
发生了什么,我该如何解决这个问题?(有更好的东西gsub('&', '%26'),就是这样.)
是否有可能逃脱并保持非标准| 字符中的字符在表格中的模板Wiki标记中的URL?
{| class="wikitable"
|-
! Test in Table
|-
| [http://example.org/{var1}|{var2}|{var3} Example]
|}
Run Code Online (Sandbox Code Playgroud)
应该在表格单元格中呈现这样的内容
[http://example.org/1|2|3 Example]
Run Code Online (Sandbox Code Playgroud)
并链接到
http://example.org/1|2|3
Run Code Online (Sandbox Code Playgroud)
使用垂直条,不像这样编码
http://example.org/1%7C2%7C3
Run Code Online (Sandbox Code Playgroud)
第三方网站在URL中需要«|»,我会修复服务器端的URL处理,但现在不在我手中.有关解决方法的任何帮助?
我试过这些:
[http://example.org/1|2|3 Example] doesn't work within a table
[http://example.org/{var1}|{var2}|{var3} Example] works in tables
Run Code Online (Sandbox Code Playgroud)
但是两者都创建了有效的标准URL,其中垂直条正确地URL编码为%7C,如上所述,我想阻止它.
在我的网页中提交表单并在文本字段中输入空格时,它在后端java代码而不是空格中被读为%20.我可以在后端将%20替换回"",但我认为这不是正确的方法,它可能发生在应用程序的任何地方.
提交表单时,有没有更好的方法在前端处理它?
我在ASP.NET MVC 5应用程序上有以下mailto链接:
<a rel="nofollow" href="@(
String.Format("mailto:?subject={0}&body={1}",
"The title", "The description" + "%0D%0A" + "http://theurl.xyz")">
share by email
</a>
Run Code Online (Sandbox Code Playgroud)
这不是在HTML Validator上验证.我收到错误:
错误值mailto:?subject =主题&body =这是url:%0D%0Ahttp:// localhost:8580/home表示元素a上的属性href:查询组件中的空格.使用%20代替空格.
我尝试使用编码,HttpUtility.UrlEncode但是当我打开电子邮件时,我会在主题和正文中得到"+"符号和其他人,我无法解决这个问题.
在Angular 4中搜索关于各种类型的路由的多个线程/问题之后,我无法解决将queryParams传递给Angular 4路由的问题.
传递到网址时
http://localhost/search;x=y
Run Code Online (Sandbox Code Playgroud)
通过模板[queryParams] = {x:'y'}
<a [routerLink]="/search" [queryParams]="{x: 'y'}">Navigate</a>
Run Code Online (Sandbox Code Playgroud)
或在组件类中
this._router.navigate(['/search'], { queryParams: {x: 'y'} });
Run Code Online (Sandbox Code Playgroud)
结果是路由器抛出匹配错误:
Error: Cannot match any routes. URL Segment: 'search%3Fparam1%3Dtest1%26param2%3Dtest2'
Run Code Online (Sandbox Code Playgroud)
当将enableTracing设置为true时,我可以看到导航对可疑字符进行编码,这很可能是它无法匹配的原因.
我需要处理包含queryParams的URL并解析它们以进行api调用,因此必须在必需或可选的参数上使用查询参数路由.
有没有人有类似的问题,如果有的话,编码根源(ahem.)问题的原因是什么?
我理解 GET 请求需要将它们输入到 URL 中,因此需要对 URL(百分比)进行编码,以便它们在解释 URL 的服务器的上下文中没有任何意义。
但是如果数据在请求正文中而不是 URL 中,那么为什么需要对它进行 URL 编码?
例子:
我有一个文件,路径如下:D:/ bar /クレイジー·ヒッツ!/foo.abc
我正在从XML文件解析路径并将其存储在以
Then path形式调用的变量中file://localhost/D:/bar/??????????/foo.abc,以下操作正在进行中:
path=path.strip()
path=path[17:] #to remove the file://localhost/ part
path=urllib.url2pathname(path)
path=urllib.unquote(path)
Run Code Online (Sandbox Code Playgroud)
错误是:
IOError: [Errno 2] No such file or directory: 'D:\\bar\\\xe3\x82\xaf\xe3\x83\xac\xe3\x82\xa4\xe3\x82\xb8\xe3\x83\xbc\xe3\x83\xbb\xe3\x83\x92\xe3\x83\x83\xe3\x83\x84\xef\xbc\x81\\foo.abc'
Run Code Online (Sandbox Code Playgroud)
更新1:我在Windows 7上使用Python 2.7