ruby-on-rails - 使用 nokogiri 将内容中的链接替换为 rails 中的已处理链接
问题描述
我目前正在研究的功能是将内容中的所有链接替换为已处理的链接。为此,我正在使用 Nokogiri(https://github.com/sparklemotion/nokogiri)迭代所有链接。代码如下
def replace_links(content)
doc = Nokogiri::HTML(content)
doc.css("a[href]").each do |link|
link["href"] =(url_for(
controller: "some_controller",
action: "some_action",
signature: generate_signature))
end
content.sub!(content, doc.css('body').inner_html)
end
当我在内容中没有<p>
标签时,这很有效(请查看我在下面添加的图像)。Nokogiri 用
标记,如果内容本身有页面意味着,处理后的内容中会有意想不到的**p标记**。在这种情况下我该如何进行?
解决方案
您想使用 HTML 片段。
尝试这个
def replace_links(content)
fragment = Nokogiri::HTML.fragment(content)
doc.css("a[href]").each do |link|
link['href'] = ...
end
return fragment.to_html
end
不需要那个sub!
黑客,只需 return fragment.to_html
。
推荐阅读
- c# - 如何在后台加载场景/加载级别时隐藏黑屏
- javascript - 使用 HTMLAudioElement 时 useEffect 抛出 DOMException
- twitter-bootstrap - 默认情况下是否可以访问引导程序大纲样式?
- java - 如何修复“NotSerializableException:java.time.format.DateTimeFormatter”错误
- c# - 如何报告 PLINQ 查询的进度?
- python - 如何在 Maya 中选择重复对象上的特定边缘?
- iot - 实时 mqtt 消息是否将存储在同上解决方案中的 MongoDB 中?如何检查这些消息是否已存储?
- javascript - 如何从我的文本输入区域中删除“水果”值
- matlab - 如何在MATLAB中删除包含某些行中零的矩阵中的所有列
- appium - 由于 xcodebuild 失败,无法在真实设备中启动 appium:“xcodebuild failed with code 65”