哪些字符使URL无效?
这些url是否有效?
example.com/file [/] . html http://example.com/file [/] . html
哪些字符使URL无效?
这些url是否有效?
example.com/file [/] . html http://example.com/file [/] . html
当前回答
一些Unicode字符范围是有效的HTML5,尽管使用它们可能仍然不是一个好主意。
例如,href文档说http://www.w3.org/TR/html5/links.html#attr-hyperlink-href:
a和area元素上的href属性必须具有一个有效的URL值,该值可能被空格包围。
那么“有效URL”的定义指向http://url.spec.whatwg.org/,它说它的目标是:
将RFC 3986和RFC 3987与当代实现对齐,并在此过程中淘汰它们。
该文档将URL代码点定义为:
ASCII alphanumeric, "!", "$", "&", "'", "(", ")", "*", "+", ",", "-", ".", "/", ":", ";", "=", "?", "@", "_", "~", and code points in the ranges U+00A0 to U+D7FF, U+E000 to U+FDCF, U+FDF0 to U+FFFD, U+10000 to U+1FFFD, U+20000 to U+2FFFD, U+30000 to U+3FFFD, U+40000 to U+4FFFD, U+50000 to U+5FFFD, U+60000 to U+6FFFD, U+70000 to U+7FFFD, U+80000 to U+8FFFD, U+90000 to U+9FFFD, U+A0000 to U+AFFFD, U+B0000 to U+BFFFD, U+C0000 to U+CFFFD, U+D0000 to U+DFFFD, U+E1000 to U+EFFFD, U+F0000 to U+FFFFD, U+100000 to U+10FFFD.
然后在语句中使用术语“URL代码点”:
如果c不是URL代码点,也不是“%”,解析错误。
在解析算法的几个部分,包括模式,权限,相对路径,查询和片段状态:所以基本上是整个URL。
同样,验证器http://validator.w3.org/会通过“你好”这样的url,而不会通过像空格“a b”这样的字符的url
当然,正如Stephen C所提到的,这不仅与字符有关,还与上下文有关:你必须理解整个算法。但由于类“URL代码点”用于算法的关键点,它提供了一个很好的想法,你可以使用或不使用。
请参见:url中的Unicode字符
其他回答
我不能评论以上的答案,但我想强调的是,并非所有地方都允许使用允许的字符。例如,域名不能有下划线,因此http://test_url.com无效。
所有可以在URI中使用的有效字符(URL是URI的一种类型)都在RFC 3986中定义。
所有其他字符都可以在URL中使用,只要它们是“URL编码”的。这涉及为特定的“代码”更改无效字符(通常是百分号(%)后面跟着十六进制数的形式)。
此链接HTML URL Encoding Reference包含无效字符的编码列表。
这并不是对你的问题的真正答案,但验证URL确实是一个严肃的p.i.t.a。你可能最好验证域名,并留下URL的查询部分。这是我的经验。
您还可以通过ping URL来查看它是否会得到一个有效的响应,但是对于这样一个简单的任务来说,这可能有点太过了。
正则表达式检测url是丰富的,谷歌它:)
我提出了一些PHP正则表达式,可以将文本中的url转换为锚标记。(首先它转换所有的www。url到http://,,然后转换所有的url与https?:// to a href=…HTML链接
美元管柱= preg_replace (' / (https ?:\/\/)([!#$&-;=?\-\[\]_ a - z ~ %] +) / sim’,'“$ 1 $ 2”< a href = > $ 2 < / a > ', preg_replace(' /(±s) ( \.)([!#$&-;=?\-\[\]_ a - z ~ %] +) / sim’' $ 1http: / / $, $管柱));
一些Unicode字符范围是有效的HTML5,尽管使用它们可能仍然不是一个好主意。
例如,href文档说http://www.w3.org/TR/html5/links.html#attr-hyperlink-href:
a和area元素上的href属性必须具有一个有效的URL值,该值可能被空格包围。
那么“有效URL”的定义指向http://url.spec.whatwg.org/,它说它的目标是:
将RFC 3986和RFC 3987与当代实现对齐,并在此过程中淘汰它们。
该文档将URL代码点定义为:
ASCII alphanumeric, "!", "$", "&", "'", "(", ")", "*", "+", ",", "-", ".", "/", ":", ";", "=", "?", "@", "_", "~", and code points in the ranges U+00A0 to U+D7FF, U+E000 to U+FDCF, U+FDF0 to U+FFFD, U+10000 to U+1FFFD, U+20000 to U+2FFFD, U+30000 to U+3FFFD, U+40000 to U+4FFFD, U+50000 to U+5FFFD, U+60000 to U+6FFFD, U+70000 to U+7FFFD, U+80000 to U+8FFFD, U+90000 to U+9FFFD, U+A0000 to U+AFFFD, U+B0000 to U+BFFFD, U+C0000 to U+CFFFD, U+D0000 to U+DFFFD, U+E1000 to U+EFFFD, U+F0000 to U+FFFFD, U+100000 to U+10FFFD.
然后在语句中使用术语“URL代码点”:
如果c不是URL代码点,也不是“%”,解析错误。
在解析算法的几个部分,包括模式,权限,相对路径,查询和片段状态:所以基本上是整个URL。
同样,验证器http://validator.w3.org/会通过“你好”这样的url,而不会通过像空格“a b”这样的字符的url
当然,正如Stephen C所提到的,这不仅与字符有关,还与上下文有关:你必须理解整个算法。但由于类“URL代码点”用于算法的关键点,它提供了一个很好的想法,你可以使用或不使用。
请参见:url中的Unicode字符