Боюсь, ты не сможешь. Все параметры, отправленные с запросом, имеют тип string.
Вы можете отправить параметры в кодировке JSON.
Предполагающий объект
{"int":1}
urlencoded это
%7B%22int%22%3A1%7D
Отправить запрос на http://domain.org/params=%7B%22int%22%3A1%7D
на domain.org расшифруйте его:
$params=json_decode($_GET['params']);
И вы увидите, что тип по-прежнему целочисленный:
echo gettype($params->int);
Но это как-то также является серверным преобразованием (потому что вам нужно декодировать JSON).
Что касается последующего комментария, вот пример, который показывает, что это не свинья с помадой, попробуйте и посмотрите, сохранились ли типы:
<code><html>
<head>
<title>Test</title>
<script type="text/javascript">
<!--
function request()
{
var obj={
"pig":1,
"cow":2.2,
"duck":'donald',
"rabbit":{"ears":2}
};
location.replace('?params='+encodeURIComponent(JSON.stringify(obj)));
}
//-->
</script>
</head>
<body>
<input type="button" onclick="request()" value="click">
<pre><?php
if(isset($_GET['params']) && $params=json_decode($_GET['params']))
{
var_dump($params);
}
?>
Выход:
object(stdClass)#1 (4) {
["pig"]=>
int(1)
["cow"]=>
float(2.2)
["duck"]=>
string(6) "donald"
["rabbit"]=>
object(stdClass)#2 (1) {
["ears"]=>
int(2)
}
}
Мне кажется, это неплохо, просто для этого был «изобретен» JSON, для обмена данными между приложениями.