2016-12-26 738 views
1

下面的PHP代码:PHP “&CURREN” 字符串变成奇怪的符号

<?php 
$s = "page.com?a=1&current"; 
echo $s; 

输出意外:

page.com?a=1¤t 

设置文件编码成UTF-8没有工作。当我将$s设置为“page.com?a = & curre”时,输出如预期。

我想知道这是否是因为在我的项目中我有$url,它需要附加“& currentPage = 1”。

是什么导致了这个问题?

+0

输出就可以了。浏览器视图&curren; :-)。 – Eugen

+0

对不起,但我不能重现这个问题,也许你应该添加其他元素到你的问题。 –

+0

@Eugen确实如此,但如果在回应页面链接时发生这种情况,事情会变得混乱。 – sidyll

回答

2

这就是所解释货币符号的entity code。如果你正在构建的GET网址,你可以以不同的方式解决这个问题:

  • 使用urlencode()您的查询值:

    $s = 'page.com?' . urlencode("a=1&currentPage=2");

  • 使用&本身的实体;

    'page.com?a=1&amp;currentPage=2'

  • 或者说不需要&在开始使用你的变量:

    'page.com?currentPage=2&a=1'

+0

谢谢!我的项目现在可以继续 – user1712263

0

问题是因为& curren是¤符号的短代码。所以只要你把&目前它把它作为¤t

解决这个你可以使用进行urlencode功能

$s = urlencode("page.com?a=1&current"); 
echo $s; 

希望这将解决您的问题。

+0

'&curren;'是一个html实体,但不是'&curren' –

+0

,但它以某种方式将其转换为无**; ** – reza

1

&符号&需要转换成HTML特殊字符(例如使用htmlspecialcharsurlencode或简单地输入)。您的输出转换成HTML应该是这样的:

$s = "page.com?a=1&amp;current"; 

否则,他们可能会用HTML实体碰撞,因为在你的例子发生。 ¤的HTML实体为&curren;,由于我未知的原因,这些实体在HTML中甚至没有关闭;。编辑:至于为什么和何时发生这种情况,关键字是历史原因,read here

+0

它们无效,但与浏览器中的大多数解析器无关。也许是为了向后兼容 – sidyll

+0

是的。只是添加了更多背景的链接,为什么会发生这种情况。 –

+0

优秀的信息,感谢您的研究! – sidyll