人们谈论URL,URI和URN就好像它们是不同的东西,但它们看起来与肉眼相同.
它们之间有什么区别?
如何检查给定字符串是否为有效的URL地址?
我对正则表达式的了解是基本的,不允许我从我在网上看到的数百个正则表达式中进行选择.
目前我有一个输入框,可以检测URL并解析数据.
所以现在,我正在使用:
var urlR = /^(?:([A-Za-z]+):)?(\/{0,3})([0-9.\-A-Za-z]+)
(?::(\d+))?(?:\/([^?#]*))?(?:\?([^#]*))?(?:#(.*))?$/;
var url= content.match(urlR);
Run Code Online (Sandbox Code Playgroud)
问题是,当我输入一个URL时www.google.com,它不起作用.当我进入时http://www.google.com,它正在工作.
我的正则表达式不是很流利.谁能帮我?
有没有办法在JavaScript中检查字符串是否是URL?
RegExes被排除在外,因为URL最有可能写成stackoverflow; 也就是说它可能没有.com,www或者http.
我正在编写自动生成HTML的代码,我希望它能正确编码.
假设我正在生成指向以下网址的链接:
http://www.google.com/search?rls=en&q=stack+overflow
Run Code Online (Sandbox Code Playgroud)
我假设所有属性值都应该是HTML编码的.(如果我错了,请纠正我.)这意味着如果我将上面的URL放入锚标签,我应该将&符编码为&,如下所示:
<a href="http://www.google.com/search?rls=en&q=stack+overflow">
Run Code Online (Sandbox Code Playgroud)
那是对的吗?
在2010年,您是否会在大型门户网站中提供包含UTF-8字符的URL?
根据URL上的RFC禁止使用Unicode字符(请参阅此处).它们必须被编码为符合标准的百分比.
不过,我的主要观点是提供未编码的字符,其唯一目的是拥有漂亮的URL,因此百分比编码已经完成.
无论RFC说什么,所有主流浏览器似乎都可以解析这些URL.不过,我的总体印象是,当离开网络浏览器的域时,它会变得非常不稳定:
我的印象是否正确,预计会遇到麻烦,因此,如果您为非技术受众提供服务并且即使引用并传递了所有链接也很重要,那么这还不是一个实用的解决方案吗?
是否有一些神奇的方式在HTML中提供漂亮的URL
http://www.example.com/düsseldorf?neighbourhood=Lörick
Run Code Online (Sandbox Code Playgroud)
可以复制+粘贴特殊字符,但在旧客户端重复使用时可以正常工作吗?
是否允许URI(特别是HTTP URL)包含一个或多个空格字符?如果必须对URL 进行编码,这+只是一个常用的约定,还是合法的替代方案?
特别是,有人可以指向一个RFC,表明必须编码带空格的URL 吗?
问题的动机:在对网站进行beta测试时,我注意到有些网址是用空格构建的.Firefox似乎做对了,让我感到惊讶!但我希望能够将开发人员指向RFC,以便他们觉得需要修复这些URL.
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如何包含空格?如果可以的话,替换空间的做法+来自哪里?
我正在使用Tomcat 8.在一种情况下,我需要处理来自外部源的外部请求,其中请求具有由其分隔的参数|.
请求看起来像这样:
http://localhost:8080/app/handleResponse?msg=name|id|
在这种情况下,我得到以下错误.
java.lang.IllegalArgumentException: Invalid character found in the request target. The valid characters are defined in RFC 7230 and RFC 3986
at org.apache.coyote.http11.Http11InputBuffer.parseRequestLine(Http11InputBuffer.java:467)
at org.apache.coyote.http11.Http11Processor.service(Http11Processor.java:667)
at org.apache.coyote.AbstractProcessorLight.process(AbstractProcessorLight.java:66)
at org.apache.coyote.AbstractProtocol$ConnectionHandler.process(AbstractProtocol.java:789)
at org.apache.tomcat.util.net.NioEndpoint$SocketProcessor.doRun(NioEndpoint.java:1455)
at org.apache.tomcat.util.net.SocketProcessorBase.run(SocketProcessorBase.java:49)
at java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1142)
at java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:617)
at org.apache.tomcat.util.threads.TaskThread$WrappingRunnable.run(TaskThread.java:61)
at java.lang.Thread.run(Thread.java:745)
Run Code Online (Sandbox Code Playgroud)
编辑1
它适用于Apache Tomcat 8.0.30但不适用于Tomcat 8.5
可能重复:
哪个字符使网址无效?
我正在尝试删除大字符串的非URL部分.我发现的大多数正则表达式都是这样的[A-Za-z0-9-_.!~*'()],但是有更多可以包含url的东西.像http://127.0.0.1:8080/test?v=123#this例如
那么有效网址的最新字符是什么?
编辑:
他们似乎是:
A-Za-z0-9 -._〜:/?#[] @!$&'()*+ ,; =和%后跟十六进制值