替换基于数据库的html文本
我想制作应用程序,将所需的网页日语翻译成英语的词汇。 但是我想要开始forms只是简单地显示网页内联欲望的网页,如谷歌翻译。( 见这里 )
我使用下面的代码从所需的URL获取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。
I want to switch "aaa" this and "ccc"
假设我想将(替换)“aaa”切换为“bbb”,将“ccc”切换为“ddd”。 应该切换并切换而不是前一个单词的单词在数据库中。(目标:“aaa”,“ccc”开关:“bbb”,“ddd”)
因为这个html是我用open-uri得到它的,所以我无法实现像#{target}
这样的代码。
根据这个答案中的代码和这个答案工作 ,你可以做这样的事情:
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”。