您将如何删除网址中的点数段?
答案 0 :(得分:2)
要通过删除点段来规范化URL,我会使用RFC 3986规定的算法:
5.2.4。删除点分段
伪代码也指向
的“remove_dot_segments”例程 解释和删除特殊的“。”和“..”完整路径
引用路径中的段。这是在路径为
之后完成的 从参考中提取,无论路径是否相对,在中 在zh之前删除任何无效或无关的点段 形成目标URI。虽然有很多方法可以实现 这个删除过程,我们描述了一个使用两个字符串
的简单方法 缓冲器。
使用现在附加的路径初始化输入缓冲区 组件和输出缓冲区初始化为空 字符串。
虽然输入缓冲区不为空,但循环如下:
一个。如果输入缓冲区以前缀“../”或“./”开头, 然后从输入缓冲区中删除该前缀;否则,
B中。如果输入缓冲区以前缀“/./”或“/。”开头, 在哪里“。”是一个完整的路径段,然后替换它 输入缓冲区中带有“/”的前缀;否则,
℃。如果输入缓冲区以前缀“/../”或“/ ..”开头, 其中“..”是一个完整的路径段,然后替换它 输入缓冲区中带有“/”的前缀,并删除最后一个 段及其前面的“/”(如果有的话)来自输出 缓冲;否则,
d。如果输入缓冲区仅包含“。”或“..”,然后删除 来自输入缓冲区;否则,
电子。将输入缓冲区中的第一个路径段移动到结尾 输出缓冲区,包括初始“/”字符(如果 任何)和任何后续角色,但不包括, 下一个“/”字符或输入缓冲区的结尾。
- 醇>
最后,输出缓冲区作为结果返回 remove_dot_segments。
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'
<强>参考文献:强>