PHP“¤”字符串变成奇怪的符号

时间:2016-12-26 20:04:07

标签: php string

以下PHP代码:

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

输出意外:

page.com?a=1¤t

将文件编码设置为utf-8不起作用。当我将$s设置为“page.com?a=1&curre”时,输出符合预期。

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

是什么导致了这个问题?

5 个答案:

答案 0 :(得分:4)

这是解释货币符号的entity code。如果您正在构建GET URL,可以通过各种方式解决它:

  • 在查询值上使用urlencode()

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

  • 将实体用于&本身;

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

  • 或者在开头使用您的变量,因此不需要&

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

答案 1 :(得分:1)

&符号&需要转换为HTML特殊字符(例如使用htmlspecialcharsurlencode,或者只需输入)。您输出到HTML应如下所示:

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

否则它们可能会与HTML实体发生冲突,如您的示例所示。 ¤的HTML实体为&curren;,由于我不知道的原因,即使没有结束;,这些实体也会在HTML中匹配。编辑:关于为什么以及何时发生这种情况,关键字是历史原因,read here

答案 2 :(得分:0)

问题是因为&amp; curren是¤符号的短代码。所以每当你把&amp; current 放在¤t时。

解决这个问题你可以使用urlencode函数

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

希望这能解决您的问题。

答案 3 :(得分:0)

如果要在屏幕上显示字符串,则只需要用&amp;替换所有&字符就可以在屏幕上显示。实际不要像这样替换网址字符串中的字符,否则网址将无法正常工作。

例如

printf( 'this is my string: %s' , str_replace('&', '&amp;', $yourFullString) );

答案 4 :(得分:0)

简单的解决方案是将 & 转换为编码格式,如 &amp;。这对我有用。这是例子

URL."reference=1&amp;currency=";