如何使 &curren 直接显示,而不是作为HTML实体

6

我正在使用php查看一个包含URL的XML文件。这些URL看起来像这样:

https://site.com/bacon_report?Id=1&report=1&currentDimension=2&param=1

当我输出URL时,“&curren”会显示为“¤”(也称为#164、A4或货币符号),链接无法工作。即使没有分号,这也会发生。最干净的方法是什么,可以让“&curren”文字直接显示?

你正在创建一个URL;你必须遵循一些规则(如url编码)。 - Jon
5个回答

10

有趣的是,我刚遇到同样的问题并找到了这个答案。不过,我找到了另一种解决方案,可能更好!

简单地说,在查询字符串的开头放置变量,你就可以完全避免使用 &curren。

做法如下:

https://site.com/bacon_report?currentDimension=2&Id=1&report=1&param=1

改为:

https://site.com/bacon_report?Id=1&report=1&currentDimension=2&param=1

8

使用php函数urlencode:

urlencode("https://site.com/bacon_report?Id=1&report=1&currentDimension=2&param=1"

将输出

https%3A%2F%2Fsite.com%2Fbacon_report%3FId%3D1%26report%3D1%26currentDimension%3D2%26param%3D1 

如果我对完整的URL进行urlencode,则链接将不再起作用。这里也提到了http://webmasters.stackexchange.com/questions/5509/urlencode-of-full-url,不应该这样做。 - Adam

6
这里的问题是转义 - 您需要转义"&"字符。在XML中,像<、>、'、"和&这样的所有特殊字符都应该被转义。
正确转义它为:
https://example.com/bacon_report?Id=1&amp;report=1&amp;currentDimension=2&amp;param=1

就像在HTML中一样:

<a href="https://example.com/bacon_report?Id=1&report=1&currentDimension=2&param=1">WRONG - no escaping</a>
<a href="https://example.com/bacon_report?Id=1&amp;report=1&amp;currentDimension=2&amp;param=1">CORRECT - correct escape sequence</a>

因此,展示"&curren"在HTML/XML中最干净的方法是正确转义&符号,并将其呈现为"&amp;curren"。

0

我在撰写技术文档(使用Markdown转换为HTML)时遇到了这个问题。

为了解决这个问题,我使用了零宽度空格字符,并将其从这些括号(​)之间复制粘贴。这样看起来就没有空格,并且可以包含以下内容而不会出现任何问题: /search?query=1&currentLonLat=-74.600291,40.360869


1
添加一个零宽字符可能看起来没问题,但可能会破坏可点击的链接 - 然后您实际上可能会将参数“currentLonLat”更改为“%e2%80%8bcurrentLonLat”,其中“e2%80%8b”是正确的URL编码零宽度空格字符。更好的解决方案是正确编码特殊字符,就像在您的链接/search?query=1&currentLonLat=-74.600291,40.360869中一样...如果您查看HTML源代码,它将被编码为/search?query=1&amp;currentLonLat=-74.600291,40.360869,其中和号“&”被正确转义为“&”。 - Trondster

0

我认为在这种情况下最好使用htmlentities,因为使用urlencode会得到以下结果:

https%3A%2F%2Fexample.com%2Fbacon_report%3FId%3D1%26report%3D1%26currentDimension%3D2%26param%3D1

而且当应用urldecode时,仍然会保留&curren符号,而使用htmlentities则可以使URL更加清晰:

https://example.com/bacon_report?Id=1&report=1&currentDimension=2&param=1

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接