我正在使用php查看一个包含URL的XML文件。这些URL看起来像这样:
https://site.com/bacon_report?Id=1&report=1¤tDimension=2¶m=1
当我输出URL时,“¤”会显示为“¤”(也称为#164、A4或货币符号),链接无法工作。即使没有分号,这也会发生。最干净的方法是什么,可以让“¤”文字直接显示?我正在使用php查看一个包含URL的XML文件。这些URL看起来像这样:
https://site.com/bacon_report?Id=1&report=1¤tDimension=2¶m=1
当我输出URL时,“¤”会显示为“¤”(也称为#164、A4或货币符号),链接无法工作。即使没有分号,这也会发生。最干净的方法是什么,可以让“¤”文字直接显示?有趣的是,我刚遇到同样的问题并找到了这个答案。不过,我找到了另一种解决方案,可能更好!
简单地说,在查询字符串的开头放置变量,你就可以完全避免使用 ¤。
做法如下:
https://site.com/bacon_report?currentDimension=2&Id=1&report=1¶m=1
改为:
https://site.com/bacon_report?Id=1&report=1¤tDimension=2¶m=1
使用php函数urlencode:
urlencode("https://site.com/bacon_report?Id=1&report=1¤tDimension=2¶m=1"
将输出
https%3A%2F%2Fsite.com%2Fbacon_report%3FId%3D1%26report%3D1%26currentDimension%3D2%26param%3D1
https://example.com/bacon_report?Id=1&report=1&currentDimension=2&param=1
就像在HTML中一样:
<a href="https://example.com/bacon_report?Id=1&report=1¤tDimension=2¶m=1">WRONG - no escaping</a>
<a href="https://example.com/bacon_report?Id=1&report=1&currentDimension=2&param=1">CORRECT - correct escape sequence</a>
我在撰写技术文档(使用Markdown转换为HTML)时遇到了这个问题。
为了解决这个问题,我使用了零宽度空格字符,并将其从这些括号()之间复制粘贴。这样看起来就没有空格,并且可以包含以下内容而不会出现任何问题:
/search?query=1¤tLonLat=-74.600291,40.360869
/search?query=1¤tLonLat=-74.600291,40.360869
中一样...如果您查看HTML源代码,它将被编码为/search?query=1&currentLonLat=-74.600291,40.360869
,其中和号“&”被正确转义为“&”。 - Trondster我认为在这种情况下最好使用htmlentities,因为使用urlencode会得到以下结果:
https%3A%2F%2Fexample.com%2Fbacon_report%3FId%3D1%26report%3D1%26currentDimension%3D2%26param%3D1
而且当应用urldecode时,仍然会保留¤符号,而使用htmlentities则可以使URL更加清晰:
https://example.com/bacon_report?Id=1&report=1¤tDimension=2¶m=1