PHP http_build_query,其中包含数字字符串

时间:2017-06-02 17:59:46

标签: php

我正在尝试使用http_build_query构建一个查询字符串,当一个数字作为数组中的一个值传递时,它会产生意外的结果。

$number = '123';
$data   = array(
    'first'     => $number,
    'second'    => 'test',
);
http_build_query( $data );
//output is first%123&second=test
//unexpected output is % after first instead of =

$number = '500';
$data   = array(
    'first'     => $number,
    'second'    => 'test',
);
http_build_query( $data );
//output is firstP0&second=test
//unexpected output is P0 after first instead of =500

$number = '1';
$data   = array(
    'first'     => $number,
    'second'    => 'test',
);
http_build_query( $data );
//output is first=1&second=test
//output has an equal sign and not a percent sign

在第一个例子中,在我希望有一个等号的地方有一个百分号。

第二个示例将= 500更改为P0。

第三个例子是我一直期待的,但出于某种原因,似乎数字的长度正在改变%=之间的输出

注意:我尝试使用各种长度数字(1,12,1234,12345等),并使用不同的数字。只有单个数字示例(无论我是否使用1,2,3,4等)都能够产生与预期相同的等号。

有没有办法将数字传递给http_build_query(),它不会像我在示例中引用的那样产生意外输出?

1 个答案:

答案 0 :(得分:0)

这似乎是一个怪癖,无论是网站运行的PHP版本还是服务器设置中的某些内容。我在其他几个具有不同PHP版本的服务器上尝试了这些代码,它运行正常。

我在使用PHP v5.5.24和Apache v2.4.12时发生意外输出的服务器设置。 localhost服务器在DesktopServer版本3.8.3上运行。

我无法确定导致这种情况发生的具体问题,但是当我在使用PHP 7的其他服务器上运行相同的代码时,它按预期工作。我还尝试了不同服务器上的各种其他PHP版本,并且都正常工作。

可能是以下问题之一:

  • (最有可能)php.ini或其他一些服务器设置中设置的内容导致网站错误地执行该功能。遗憾的是,我还没有确切地知道这个问题到底是什么(如果我发现的话会更新这个答案)。
  • (不太可能)PHP 5.5.24存在无法正确输出该功能的问题。虽然http_build_query since PHP 5.4.0没有变化,但如果出现问题,它仍应存在于PHP 7中。