哪些字符使网址无效?
这些有效的网址是?
example.com/file[/].htmlhttp://example.com/file[/].html在URL中,我应该使用%20或编码空格+吗?例如,在以下示例中,哪一个是正确的?
www.mydomain.com?type=xbox%20360
www.mydomain.com?type=xbox+360
Run Code Online (Sandbox Code Playgroud)
我们公司倾向于前者,但使用URLEncoder.encode(String, String)带有"xbox 360"(和"UTF-8")的Java方法返回后者.
那么,有什么区别?
w3fools声称URL可以包含空格:http://w3fools.com/#html_urlencode
这是真的?URL如何包含未编码的空间?
我的印象是HTTP请求的请求行使用空格作为分隔符,格式为{the method}{space}{the path}{space}{the protocol}:
GET /index.html http/1.1
Run Code Online (Sandbox Code Playgroud)
因此URL如何包含空格?如果可以的话,替换空间的做法+来自哪里?
一直以来我的做法是,当我使用图像时,我将它们命名为
walls_ico,bu_hover
所以当我给出路径他们就像
<img src="images/walls_ico.ico" />
<img src="buttons/bu_hover.png" />
Run Code Online (Sandbox Code Playgroud)
UNTIL现在当我在一个用户上传文件的项目时......
我想知道文件和文件夹之间的空格是否可以
<img src="buttons/bu hover.png" />
Run Code Online (Sandbox Code Playgroud) 在我的博客中,我将URI存储在实体上以允许它们被定制(和友好).最初,它们可以包含空格(例如"/tags/ASP.NET MVC"),但W3C验证表明空格无效.
这个System.Uri类需要空格,并且似乎按照我想要的方式对它们进行编码(例如/tags/ASP.NET MVC变成/tags/ASP.NET%20MVC),但是我不想创建一个Uri只是扔掉它,这感觉很脏!
注意:没有Html.Encode,Html.AttributeEncode并且Url.Encode将编码"/tags/ASP.NET MVC"为"/tags/ASP.NET%20MVC".
编辑:我编辑了DataType我的问题部分,因为事实证明DataType没有直接提供任何验证,并且没有内置的URI验证.我在dataannotationsextensions.org上找到了一些额外的验证器,但它只支持绝对URI,它看起来像空格我也有效.
我试图用两种不同的方法(xmlParse和httr :: GET)请求一个XML文档,并期望响应是相同的.我用xmlParse得到的响应是我所期望的但是使用httr :: GET我的请求URL在某些时候会被截断.
一个例子:
require(httr)
require(XML)
require(rvest)
term <- "alopecia areata"
request <- paste0("http://eutils.ncbi.nlm.nih.gov/entrez/eutils/egquery.fcgi?term=",term)
#requesting URL with XML
xml_response <- xmlParse(request)
xml_response %>%
xml_nodes(xpath = "//Result/Term") %>%
xml_text
Run Code Online (Sandbox Code Playgroud)
这应该返回
[1] "alopecia areata"
Run Code Online (Sandbox Code Playgroud)
现在为httr
httr_response <- GET(request)
httr_content <- content(httr_response)
httr_content %>%
xml_nodes(xpath = "//Result/Term") %>%
xml_text
Run Code Online (Sandbox Code Playgroud)
这回来了
[1] "alopecia"
Run Code Online (Sandbox Code Playgroud)
有趣的是:如果我们检查请求的URL的httr_response元素,那是正确的.只有回应是错误的.
> httr_response$request$opts$url
[1] "http://eutils.ncbi.nlm.nih.gov/entrez/eutils/egquery.fcgi?term=alopecia areata"
> httr_response$url
[1] "http://eutils.ncbi.nlm.nih.gov/gquery?term=alopecia&retmode=xml"
Run Code Online (Sandbox Code Playgroud)
所以在某些时候我的查询词被截断了.如果将整个请求手动放入浏览器,则其行为与预期一致.
任何建议如何解决这个问题将不胜感激.
我正在尝试向 Api Rest 发出 get 请求,但我总是收到 404,但是如果尝试在浏览器或 postMan 中复制 queryUrl,它可以完美运行。
restTemplate.getForObject(queryUrl, entity ,Integer.class);
我也试过这个:
HttpHeaders httpHeaders = new HttpHeaders();
httpHeaders.setContentType(MediaType.APPLICATION_JSON);
HttpEntity entity = new HttpEntity(httpHeaders);
log.debug("请求头:" + entity.getHeaders());
ResponseEntity response = restTemplate.exchange(queryUrl,
HttpMethod.GET, entity, String.class);
但什么都没有改变。谁能帮我?
Response.Redirect("./ blah.aspx?key = my value with spaces");
它将浏览器发送到:
mysite/blah.aspx?key=my%20value%20with%20spaces
Run Code Online (Sandbox Code Playgroud)
现在我理解为什么它这样做 - 为了古老的浏览器会扼杀空间.但实际上,我想要的是拥有一个漂亮的URL,其中包含空格而不是%s,因为它的工作原理相同.
有没有办法停止response.redirect urlencoding我的空间?
非常感谢