如何将协议相对URL转换为标准HTTP?

时间:2014-06-12 09:08:00

标签: ruby-on-rails ruby replace wkhtmltoimage

我正在使用wkhtmltoimage实用程序,该实用程序不支持协议相对URL,例如:<script src="//cdnjs.cloudflare.com/ajax/libs/numeral.js/1.4.5/numeral.min.js"></script>

我需要在Ruby中将其转换为:<script src="http://cdnjs.cloudflare.com/ajax/libs/numeral.js/1.4.5/numeral.min.js"></script>。我想知道找到这些类型网址的最有效方法是什么,因为我无法弄清楚如何为它们编写正则表达式,然后将http:添加到其中。

提前致谢。

2 个答案:

答案 0 :(得分:0)

您可以使用perl:

perl -pi -e 's/src="\/\//src="http:\/\//' *

上述声明将替换目录中的所有模式。

答案 1 :(得分:0)

这里不需要使用Regexp,只需使用HTML的HTML解析器和URI的URI解析器:

require 'nokogiri'
require 'uri'

doc = Nokogiri.HTML(<<-EOHTML)
  <script 
    src="//cdnjs.cloudflare.com/ajax/libs/numeral.js/1.4.5/numeral.min.js">
  </script>
EOHTML

doc.xpath('//script[@src]').each do |script|
  uri = URI.parse(script['src'])  
  uri.scheme = 'http' if uri.scheme.nil?  
  script['src'] = uri.to_s
end