php語言

當前位置 /首頁/計算機/php語言/列表

PHP中將字串轉化為整數

早在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)

{

TAG標籤:轉化 PHP 中將 整數 字串 #