в php5, как остановить GET от (ошибочно) преобразования в числовые? - PullRequest
3 голосов
/ 03 января 2012

по отношению к php int64 ограничивает , если у uri есть аргумент int64, как вы можете предотвратить неправильное преобразование GET в числовое значение и просто сохранить его в виде строки?

http://some.com?id=1707541557936130

тогда

echo $_GET['id'] => 1.7075415579361E+15

как это предотвратить и $_GET['id'] быть строкой 1707541557936130?

способ работы $_GET теперь неприменим. надо разобрать $_SERVER["QUERY_STRING"] сам. но тогда никогда не узнаете, когда php возьмет переменную и снова неправильно конвертирует.

ПРИМЕЧАНИЕ: afaik это будет проблемой на 32-битной, не 64-битных установках php.

Ответы [ 4 ]

4 голосов
/ 03 января 2012

Все, что выходит из _GET / _POST / _COOKIE - это строка.Эти данные не будут преобразованы в число, если вы не сделаете что-то, что вынудит их интерпретировать как одно.

echo $_GET['id']; // echoes your big number
echo $_GET['id'] + 0; // forces an int conversion
0 голосов
/ 03 января 2012

Если текущие решения не работают, вы можете добавить строковый символ к целому числу, например,

http://some.com?id=i1707541557936130

Кроме того, если возникает проблема с отображением числа с плавающей запятой, вы можете использовать number_format() .

$id = (string) number_format($_GET['id']);
echo $id;
0 голосов
/ 03 января 2012

укуси пулю и установи 64bit - это то, что на твоем сервере в любом случае

0 голосов
/ 03 января 2012

Это должно сделать работу.

echo (string) $_GET['id'];
...