def wrap(content) require "Nokogiri" doc = Nokogiri::HTML.fragment("<div>"+content+"</div>") chunks = doc.at("div").traverse do |p| if p.is_a?(Nokogiri::XML::Text) input = p.content p.content = input.scan(/.{1,5}/).join("­") end end doc.at("div").inner_html end wrap("aaaaaaaaaa")
дает мне
"aaaaa&shy;aaaaa"
вместо
"aaaaa­aaaaa"
Как получить второй результат?
Возвращение
doc.at("div").text
doc.at("div").inner_html
Это, однако, удаляет весь HTML из результата. Если вам нужно сохранить другую разметку, вы, вероятно, можете использовать CGI.unescapeHTML:
CGI.unescapeHTML(doc.at("div").inner_html)