我使用正则表达式将纯文本URL转换为可单击的链接.
@(https?://([-\w\.]+)+(:\d+)?(/([\w/_\.-]*(\?\S+)?)?)?)@
但是,有时在文本正文中,URL每行枚举一个,末尾用分号.真实的URL不包含任何";".
http://www.aaa.org/pressdetail.asp?PRESS_REL_ID=275; http://www.aaa.org/pressdetail.asp?PRESS_REL_ID=123; http://www.aaa.org/pressdetail.asp?PRESS_REL_ID=124
是否允许在URL中使用分号(;)或分号是否可以作为URL结尾的标记?这怎么会适合我的正则表达式?
分号是保留的,除非其特殊用途(取决于方案),否则不得使用未编码的分号.第2.2节:
许多URL方案保留某些特殊含义的字符:它们在URL的特定于方案的部分中的外观具有指定的语义.如果在方案中保留对应于八位字节的字符,则必须对八位字节进行编码.字符";","/","?",":","@","="和"&"是可以为方案中的特殊含义保留的字符.在方案中不能保留其他字符.
W3C鼓励CGI计划接受; 以及&在查询字符串中(即对待?name=fred&age=50
和?name=fred;age=50
相同的方式).这应该是因为&必须编码为& 在HTML中; 没有.
分号是合法的URI字符; 它属于sub-delimiter类别:http://www.ietf.org/rfc/rfc3986.txt
但是,规范声明半色是否对特定 URI 合法取决于该URI的方案或生产者.因此,如果使用这些链接的站点不允许使用分号,那么它们对于该特定情况无效.
http://www.ietf.org/rfc/rfc3986.txt涵盖了URL和以未编码形式出现的字符.鉴于包含分号的URL在浏览器中正常工作,您的代码应该支持它们.
从技术上讲,分号是URL字符串中的合法子分隔符; 上面引用了大量的源材料,包括http://www.ietf.org/rfc/rfc3986.txt.
有些人的确是使用它的合法目的,虽然它的使用是位点特异性的可能(即仅适用于该网站的使用),因为它的使用必须通过使用它的网站定义.
但在现实世界中,URL中分号的主要用途是隐藏合法URL后面的病毒或网络钓鱼URL.
例如,向某人发送包含以下链接的电子邮件:
http:// www.yahoo.com/junk/nonsense;0200.0xfe.0x37.0xbf/malicious_file/
将导致雅虎!链接(www.yahoo.com/junk/nonsense)被忽略,因为即使它是合法的(即,正确形成),也不存在这样的页面.但是第二个链接(0200.0xfe.0x37.0xbf/malicious_file /)可能存在*并且用户将被定向到malicious_file页面; 一个人的公司IT经理将得到一份报告,一个人可能会得到一个粉红色的单据.
在此之前所有的说话者都说得好,这正是新的Facebook网络钓鱼问题的解决方法.这些名字已经改变,像往常一样保护有罪.
*根据我的知识,实际上并没有这样的页面.显示的链接仅用于本讨论.