2015-05-18 53 views
1

考虑下面的PHP代码:parse_str错误解析整数转换为字符串

//JS 
// var a = { category: [9] }; 
// var x = $.param(a); 
// window.location.href = "test.com/?foo=" + x; 

$x = $_GET["foo"]; 
$x = "category%5B%5D=9"; // this is what $_GET["foo"] looks like 
$result = array(); 
parse_str($x, $result); 

var_dump($result); 

现在,这将输出:

array(1) { 
    ["category"]=> 
    array(1) { 
    [0]=> 
    string(1) "9" 
    } 
} 

哪项是错误的。 category数组内的元素应该是整数而不是字符串。为什么parse_str很难处理这个输入?我怎样才能将它转换为字符串只有在"'之间的数据? (几乎如何json_decode工作)

+4

在URL语法中没有数据输入,所以一切都被认为是一个字符串。 – Barmar

+0

它不像JSON,它对字符串的数字有不同的语法(它把字符串放在引号内)。 – Barmar

+0

@Barmar是的,那是一个错字。那么我应该使用JSON,但是我可以在GET请求中使用它吗?有没有一些“JSON到URL”的方式来转换该数据? – alexandernst

回答

2

如果您使用普通的GET,parse_str()应该如何知道所需的数据类型?你,程序员,需要:

  • 验证输入值(是不是真的数字?)
  • 投值数据键入您希望。 parse_str()将始终提供字符串。

如果您想要在客户端和服务器之间传输严格类型的值,则需要采用更复杂的方式。从json开始,通过XMLRPC转换为SOAP。

在请求中使用JSON可能是开始最简单的方法,但它并不适用于GET请求合身,因为它是很难的那种类型的网址,一定要做到这一点的代码,但是我仍然认为json没有按GET请求的套件。

+1

我意识到'$ .param()'不会将引号加到诸如“9”之类的值(不是int而是包含数字的字符串)。从这里所说的一切都是毫无意义的,我应该从一开始就使用普通的JSON。 – alexandernst

+0

是的,如果你想传输严格类型的值,使用json甚至xmlrpc或soap将是一种选择。让我加上这个答案... – hek2mgl

相关问题