我一直工作在一个simliar问题,虽然没有方括号,有效在HREF中有在使用它们的情况。在我的情况下,我需要保持它们与客户的系统兼容。
2个有用的事实:
1 - 引入nokogiri校正HREF时,将其转换为文本文档。如果你加载一个html片段并查看href,你会发现方括号在那里。
2-删除方括号只发生在href属性中,它们在其他属性中被允许。例如data-raw-href
所以,如果你加载一个文件,然后复制href属性,你可以保留原来的。您仍然需要对最终文本进行后期处理,以将data-raw-href转换回href。
一个例子(你可以在IRB试试)
require 'nokogiri'
doctext = '<html><body><a href="[my dodgy href]">link text</a></body></html>'
doc = Nokogiri.HTML(doctext)
a_tag = doc.css('a')[0]
a_tag['data-raw-href'] = a_tag['href']
doc.to_s
产量:
<!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.0 Transitional//EN" "http://www.w3.org/TR/REC-html40/loose.dtd">
<html><body>
<a href="%5Bmy%20dodgy%20href%5D" data-raw-href="[my dodgy href]">link text</a>
</body></html>
技术上方括号不应该在这样一个URL,因此引入nokogiri只是秉承标准。这组允许的字符实际上很小。 – tadman 2014-09-25 20:28:17