替换基于数据库的html文本

时间:2016-06-09 23:45:26

标签: ruby-on-rails ruby

我想制作应用程序,将所需的网页日语词汇转换为英语。 但我想要开始形式只是简单地显示网页内联欲望的网址,如Google翻译。(See here

我使用下面的代码从所需的网址获取了html数据, 现在我想在html中同时替换基于数据库的数据。

def submit
        require 'open-uri'

        charset = nil
        @html = open(params[:url]) do |f|
        charset = f.charset
        f.read
        end
    end

数据库已撤消,但我将包含应切换的日语词汇,以及应切换而不是日语词汇的英语词汇。

有任何想法或方法吗? 另外,我刚刚开始学习Ruby on Rails,所以如果你用一些例子或详细解释来解释它会很好:)

我只想根据数据库中的项目替换文本中的特定单词,我不想要多语言。

编辑:

例如,我从所需的网页上获得了以下html。

 <html>
   <head>
   </head>
   <body>
     <p>I want to switch "aaa" this and "ccc"</p>
   </body>
 </html>

假设我想切换(替换)&#34; aaa&#34; to&#34; bbb&#34;,&#34; ccc&#34;到&#34; ddd&#34;。 应该切换并切换而不是前一个单词的单词在数据库中。(目标:&#34; aaa&#34;,&#34; ccc&#34; Switch:&#34; bbb&#34;,&#34 ; DDD&#34)

因为这个html是我用open-uri得到的,所以我不能实现像#{target}这样的代码。

1 个答案:

答案 0 :(得分:1)

根据code in this answerthis answer工作,您可以这样做:

replacements = {'aaa' => 'ccc', 'bbb' => 'ddd' }
regex = Regexp.new(replacements.keys.map { |x| Regexp.escape(x) }.join('|'))
doc = Nokogiri::HTML::DocumentFragment.parse(html)
doc.traverse do |x|
  if x.text?
    x.content = x.content.gsub(regex, replacements)
  end
end

我也测试过:

replacements = {'こんにちは' => 'Good day', 'bbb' => 'ddd' }
regex = Regexp.new(replacements.keys.map { |x| Regexp.escape(x) }.join('|'))
"こんにちは Mr bbb".gsub(regex, replacements)

给出了预期:

Good day Mr ddd

您可能还想使用:

regex = Regexp.new(replacements.keys.map { |x| '\\b'+Regexp.escape(x)+'\\b' }.join('|'))

防止“aaardvark”变成“cccrdvark”。