URL规范化 - 删除点网段

时间:2014-01-09 10:32:23

标签: url normalization

您将如何删除网址中的点数段?

1 个答案:

答案 0 :(得分:2)

要通过删除点段来规范化URL,我会使用RFC 3986规定的算法:

  

5.2.4。删除点分段

     

伪代码也指向
的“remove_dot_segments”例程   解释和删除特殊的“。”和“..”完整路径
  引用路径中的段。这是在路径为
之后完成的   从参考中提取,无论路径是否相对,在中   在zh之前删除任何无效或无关的点段   形成目标URI。虽然有很多方法可以实现   这个删除过程,我们描述了一个使用两个字符串
的简单方法   缓冲器。

     
      
  1. 使用现在附加的路径初始化输入缓冲区      组件和输出缓冲区初始化为空      字符串。

  2.   
  3. 虽然输入缓冲区不为空,但循环如下:

         

    一个。如果输入缓冲区以前缀“../”或“./”开头,          然后从输入缓冲区中删除该前缀;否则,

         

    B中。如果输入缓冲区以前缀“/./”或“/。”开头,          在哪里“。”是一个完整的路径段,然后替换它          输入缓冲区中带有“/”的前缀;否则,

         

    ℃。如果输入缓冲区以前缀“/../”或“/ ..”开头,          其中“..”是一个完整的路径段,然后替换它          输入缓冲区中带有“/”的前缀,并删除最后一个          段及其前面的“/”(如果有的话)来自输出          缓冲;否则,

         

    d。如果输入缓冲区仅包含“。”或“..”,然后删除          来自输入缓冲区;否则,

         

    电子。将输入缓冲区中的第一个路径段移动到结尾          输出缓冲区,包括初始“/”字符(如果          任何)和任何后续角色,但不包括,          下一个“/”字符或输入缓冲区的结尾。

  4.   
  5. 最后,输出缓冲区作为结果返回      remove_dot_segments。

  6.   

Python实施:

In [36]: path = '/../a/b/../c/./d.html'

In [37]: while '/..' in path:
    pos = path.find('/..')
    pos2 = path.rfind('/',0,pos)
    if pos2 != -1:
        path = path[:pos2]+path[pos+3:]
    else:
        path = path.replace('/..','',1)
   ....:         

In [38]: path = path.replace('/./','/')

In [39]: path = path.replace('/.','')

In [40]: path
Out[40]: '/a/c/d.html'

<强>参考文献: