ruby - Nokogiri 使用 .empty 对空字符串返回 False?
问题描述
我正在尝试使用基于 Nokogiri 的 gem ruby<p>
-readability 从文档中删除空标签。在控制台中使用可以正常工作,如下所示:.strip.empty?
irb> p = Nokogiri::HTML("<p> </p>")
=> #<Nokogiri::HTML::Document...
irb> p.content
=> " "
irb> p.content.strip
=> ""
irb> p.content.strip.empty?
=> true
在ruby-readability gem中运行相同的操作,正在返回false
。
在该方法中,我添加了一个额外的调用来测试<p> </p>
我的测试 HTML 文档中的行:
if @options[:remove_empty_nodes]
node.css("p").each do |elem|
puts "IS IT EMPTY?"
puts element.content.strip.empty?
elem.remove if elem.content.strip.empty?
end
end
IS IT EMPTY?
false
为什么这又回来了false
?
更新:
根据下面的讨论,我在 HTML 文档中添加了一个新元素:<p></p>
. 如果我打电话element.content.bytes.inspect
或element.content.strip.bytes.inspect
得到这个:
ELEMENT:
<p> </p>
[194, 160]
ELEMENT:
<p></p>
[]
在 IRB 中,.strip
似乎正在工作:
irb> p.content.bytes.inspect
=> "[32]"
irb> p.content.strip.bytes.inspect
=> "[]"
解决方案
32
十进制是0x20
十六进制或"\u0020"
,这是UTF-8中的一个空格,并且String#strip
知道如何处理它。字节[194, 160]
是"\u00a0"
一个不间断的空格:它看起来像一个空格,但String#strip
不会将其识别为空格,因为:
空白定义为以下任何字符:null、水平制表符、换行符、垂直制表符、换页符、回车符、空格。
您可以使用空格字符属性而不是#strip
:
elem.remove if elem.content.gsub(/\p{Space}/, '').empty?
推荐阅读
- node.js - npm install 在 Windows 上因签名错误而失败
- powershell - “说话”类的奇怪属性
- c# - Unity audioclip(几乎总是)没有播放
- python-3.x - 如何让 sublime text 3 编辑器识别 python 3?
- flutter - 无法在“floatingActionButton”小部件上禁用外观动画
- android - 原因:无效类型代码:69 Android studio while building
- javascript - 如何使用依赖项触发 UseEffect Once?
- python - 有人可以向我解释 MinMaxScaler() 的工作原理吗?
- reactjs - React组件:视频运行,但流不通过方法运行
- view - 结合来自 Google Analytics 的 View 数据