URL 在用 Nokogiri 解析后被改变
URL is altered after parsing with Nokogiri
str = "<?xml version='1.0' encoding='utf-8'?><url>https://somehost?p1=v1&p2=v2</url>"
=> "<?xml version='1.0' encoding='utf-8'?><url>https://somehost?p1=v1&p2=v2</url>"
x = Nokogiri::XML(str)
=> #<Nokogiri::XML::Document:0x3fcaa893b900 name="document" children=[#<Nokogiri::XML::Element:0x3fcaa893b644 name="url" children=[#<Nokogiri::XML::Text:0x3fcaa893b48c "https://somehost?p1=v1=v2">]>]>
为什么要删除“&p2”?解析后?
这是因为在 XML/HTML 上下文中 &
具有特殊含义。你必须逃脱它:
<?xml version='1.0' encoding='utf-8'?><url>https://somehost?p1=v1&p2=v2</url>
它正在将其解析为一个实体 &p2
,它不是一个有效的实体,因此它被删除,留下 p1=v1=p2
str = "<?xml version='1.0' encoding='utf-8'?><url>https://somehost?p1=v1&p2=v2</url>"
=> "<?xml version='1.0' encoding='utf-8'?><url>https://somehost?p1=v1&p2=v2</url>"
x = Nokogiri::XML(str)
=> #<Nokogiri::XML::Document:0x3fcaa893b900 name="document" children=[#<Nokogiri::XML::Element:0x3fcaa893b644 name="url" children=[#<Nokogiri::XML::Text:0x3fcaa893b48c "https://somehost?p1=v1=v2">]>]>
为什么要删除“&p2”?解析后?
这是因为在 XML/HTML 上下文中 &
具有特殊含义。你必须逃脱它:
<?xml version='1.0' encoding='utf-8'?><url>https://somehost?p1=v1&p2=v2</url>
它正在将其解析为一个实体 &p2
,它不是一个有效的实体,因此它被删除,留下 p1=v1=p2