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

php urlencode在类中运行时返回不同的结果,php,Php,我正在运行PHP5.3.3,当使用$str=urlencode(“;”)时,$str的值是%A3,正如我所预料的那样。但是,如果我从类中调用urlencode函数,$str的值是%C2%A3 我还尝试通过函数http\u build\u query传递参数,但在类的外部/内部运行时,结果是相同的。我可以使用str\u replace来解决这个问题,以消除$str不需要的编码,但我很想知道为什么会发生这种情况。从类中调用时,几乎就好像urlencode使用了不同的字符集 任何想法都将不胜感激 很少

我正在运行PHP5.3.3,当使用
$str=urlencode(“;”)
时,
$str
的值是
%A3
,正如我所预料的那样。但是,如果我从类中调用
urlencode
函数,
$str
的值是
%C2%A3

我还尝试通过函数
http\u build\u query
传递参数,但在类的外部/内部运行时,结果是相同的。我可以使用
str\u replace
来解决这个问题,以消除
$str
不需要的编码,但我很想知道为什么会发生这种情况。从类中调用时,几乎就好像
urlencode
使用了不同的字符集


任何想法都将不胜感激

很少有理由认为
urlencode()
可能返回不同的值。课堂内外都不是问题。我们可以很容易地排除这种可能性

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

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

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

您是否检查了文件的文件编码?(utf-8/iso/…)“;”的实际表示为“of”,其utf-8位为
%C2%A3
。在那里检查:关于为什么类内和类外的输出不同,我不知道…
%C2%A3
是UTF-8,
%A3
可能是ISO 8859-1,所以您在某个地方有编码不匹配。@AdrienLeber
的实际表示是
非常错误。更好的说法是,如果UTF-8中编码的
的字节序列显示为ISO-8559-1,则显示为
,这始终是一个错误。对于OP来说,这两个序列都是“正确的”URL编码序列。较短的一个来自ISO-8559-1,也称为latin1,2字节的一个来自UTF-8。您的应用程序应该完全使用UTF-8,因此较长的字节序列更正确<代码>%C2%A3
是您应该使用的输出。谢谢Gerard,在您的帮助下,我已经设法解决了这个问题。我使用Notepad++编辑脚本,结果发现我保存类的文件是用UTF-8编码的,而调用类的文件是用ANSI编码的。在我的整个测试过程中,%符号被编码到每个页面中-因此结果不同!