糯米文學吧

位置:首頁 > 計算機 > php語言

PHP中將字符串轉化為整數

php語言1.47W

早在Sql注入橫行的前幾年,字符串轉化為整數就已經被列為每個web程序必備的操作了。web程序將get或post來的id、整數等值強制經過轉化函數轉化為整數,過濾掉危險字符,儘可能降低系統本身被Sql注入的可能性。

PHP中將字符串轉化為整數

  背景、概述

早在Sql注入橫行的前幾年,字符串轉化為整數就已經被列為每個web程序必備的操作了。web程序將get或post來的id、整數等值強制經過轉化函數轉化為整數,過濾掉危險字符,儘可能降低系統本身被Sql注入的可能性。

現如今,雖然Sql注入已經逐漸淡出歷史舞台,但是,為了保證web程序的正常運行,減少出錯概率,更好的保證用的滿意度,我們同樣需要將用户的不正確輸入轉化為我們所需要的。

  轉化方式

在PHP中,我們可以使用3種方式將字符串轉化為整數。

  1.強制類型轉換方式

強制類型轉換方式,就是“在要轉換的變量之前加上用括號括起來的目標類型”(摘自PHP手冊“類型戲法”節)的方式。

複製代碼 代碼如下:

<?php

$foo = "1"; // $foo 是字符串類型

$bar = (int)$foo; // $bar 是整型

?>

對於整型來説,強制轉換類型名稱為int或者integer。

  2.內置函數方式

內置函數方式,就是使用PHP的內置函數intval進行變量的轉換操作。

複製代碼 代碼如下:

<?php

$foo = "1"; // $foo 是字符串類型

$bar = intval($foo); // $bar 是整型

?>

intval函數的格式為:

int intval(mixed $var [, int $base]); (摘自PHP手冊)

雖然PHP手冊中明確指出,intval()不能用於array和object的轉換。但是經過我測試,轉換array的時候不會出任何問題,轉換值為1,而不是想象中的0。恐怕是因為在PHP內部,array類型的變量也被認為是非零值得緣故吧。轉換object的時候,PHP會給出如下的 notice:

Object of class xxxx could not be converted to int in on line xx

轉換值同樣為1。

  3.格式化字符串方式

格式化字符串方式,是利用sprintf的%d格式化指定的.變量,以達到類型轉換的目的。

複製代碼 代碼如下:

<?php

$foo = "1"; // $foo 是字符串類型

$bar = sprintf("%d", $foo); // $bar 是字符串類型

?>

嚴格意義上講sprintf的轉換結果還是string型,因此它不應該算是字符串轉化為整數的方式。但是經過他處理之後的字符串值確實已經成為了“被強制轉化為字符串類型的整數”。

實際測試

上面介紹了PHP中,將字符串轉化為整數的3種方式。對於一般的程序員來説,看到這裏就算結束了,下面的部分是針對變態程序員的。

  1.基本功能測試

設定以下數組:

複製代碼 代碼如下:

<?php

$a[] = "1";

$a[] = "a1";

$a[] = "1a";

$a[] = "1a2";

$a[] = "0";

$a[] = array('4',2);

$a[] = "2.3";

$a[] = "-1";

$a[] = new Directory();

?>

使用三種方式依次轉化上面給出的數組中的元素,查看轉換情況。程序源代碼如下:

複製代碼 代碼如下:

<?php

$a[] = "1";

$a[] = "a1";

$a[] = "1a";

$a[] = "1a2";

$a[] = "0";

$a[] = array('4',2);

$a[] = "2.3";

$a[] = "-1";

$a[] = new Directory();

// int

print "(int)<br />";

foreach($a as $v)

{

var_dump((int)$v);

print "<br />";

}

// intval

print "intval();<br />";

foreach($a as $v)

{