php urlencode在类中运行时返回不同的结果

时间:2016-10-19 14:43:20

标签: php

我正在运行PHP 5.3.3,当使用$str=urlencode("£")时,$str的值为%A3,正如我所料。但是,如果我在课程中调用urlencode函数,则$str的值为%C2%A3

我也试过通过函数http_build_query传递£,但是当在类外部/内部运行时,它具有相同的变量。我可以使用str_replace解决此问题,以清除$str不需要的编码,但我真的想知道为什么会发生这种情况。几乎就像urlencode在从类中调用时使用不同的字符集一样。

任何想法都将不胜感激!

1 个答案:

答案 0 :(得分:-1)

urlencode()可能返回不同值的原因很少。课堂内外都不是问题。我们可以很容易地排除这种情况。

使用以下内容创建文件test.php

<?php
var_dump(urlencode("£"));
class x {
    public function y() {
        var_dump(urlencode("£"));
    }
}

$x = new X();
$x->y();

以上两种情况都会打印完全相同的内容。

这不是PHP或函数的问题,也不是您使用该函数的地方。

看起来一个值存储了UTF-8,一个存储了ISO 8859-1。

这些值很可能是两种不同编码的两个不同值。检查值的来源,它们是如何到达的,以及它们是如何显示的。是否所有值都使用相同的编码,例如UTF-8或ISO 8859-1。它们存储在什么编码中。当它们被存储时,它们来自编码的源,例如html页面(编码的页面编码与上述所有相同)。