我正在运行PHP 5.3.3,当使用$str=urlencode("£")
时,$str
的值为%A3
,正如我所料。但是,如果我在课程中调用urlencode
函数,则$str
的值为%C2%A3
。
我也试过通过函数http_build_query
传递£,但是当在类外部/内部运行时,它具有相同的变量。我可以使用str_replace
解决此问题,以清除$str
不需要的编码,但我真的想知道为什么会发生这种情况。几乎就像urlencode
在从类中调用时使用不同的字符集一样。
任何想法都将不胜感激!
答案 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页面(编码的页面编码与上述所有相同)。