用 stripslashes 还原 addslashes 转义后的数据

首先测试 magic_quotes_gpc 是否为 ON, 如果是,则用 array_map() 递归还原转义的数据。

 
<?php
// 说明: 用 stripslashes 还原 addslashes 转义后的数据
// 整理:http://www.CodeBit.cn
if(get_magic_quotes_gpc())
{
	function stripslashes_deep($value)
	{
		$value = is_array($value) ? array_map('stripslashes_deep', $value) : (isset($value) ? stripslashes($value) : null);
		return $value;
	}
	
	$_POST = stripslashes_deep($_POST);
	$_GET = stripslashes_deep($_GET);
	$_COOKIE = stripslashes_deep($_COOKIE);
}
?>

由于 stripslashes 会将 NULL 转换为 string(0) "" ,所以需要判断是否有值:

(isset($value) ? stripslashes($value) : null)

删除非空目录的解决方案

执行删除文件夹的操作时,必须首先确保您有这个权限!

 
<?php
// 说明: 删除非空目录的解决方案
// 整理:http://www.CodeBit.cn
function removeDir($dirName)
{
	if(! is_dir($dirName))
	{
		return false;
	}
	$handle = @opendir($dirName);
	while(($file = @readdir($handle)) !== false)
	{
		if($file != '.' && $file != '..')
		{
			$dir = $dirName . '/' . $file;
			is_dir($dir) ? removeDir($dir) : @unlink($dir);
		}
	}
	closedir($handle);
	
	return rmdir($dirName) ;
}
?>

先检查此目录下是否有文件,如果有,是文件夹的话就再调用此函数删除,如果是文件就直接调用 unlink 删除,最后删除此目录。

服务器端用 mysql_real_escape_string 清洁客户端数据

用 array_map() 调用 mysql_real_escape_string 清理数组

由于 mysql_real_escape_string 需要 MySQL 数据库连接,因此,在调用 mysql_real_escape_string 之前,必须连接上 MySQL 数据库。

 
<?php
// 说明:用 array_map() 调用 mysql_real_escape_string 清理数组
// 整理:http://www.codebit.cn
function mysqlClean($data)
{
	return (is_array($data))?array_map('mysqlClean', $data):mysql_real_escape_string($data);
}
?>

调用方法

 
<?php
$conn = mysql_connect('localhost', 'user', 'pass');
...

$_POST = mysqlClean($_POST);
?>

经过清洁的数据可以直接插入数据库。

注意!mysql_real_escape_string 必须在(PHP 4 >= 4.3.0, PHP 5)的情况下才能使用。否则只能用 mysql_escape_string ,两者的区别是:

mysql_real_escape_string 考虑到连接的当前字符集,而mysql_escape_string 不考虑。

用 mysql_real_escape_string 清洁并限制字符长度

由于 mysql_real_escape_string 需要 MySQL 数据库连接,因此,在调用 mysql_real_escape_string 之前,必须连接上 MySQL 数据库。

在知道数据类型为字符串时,我们可以在清洁数据的同时限制字符串长度。此方法来自 David Lane, Hugh E. Williams《Web Database Application with PHP and MySQL 》(O’Reilly, May 2004)

 
<?php
// 说明:用 mysql_real_escape_string 清洁并限制字符长度
// 整理:http://www.codebit.cn
function mysqlClean($array, $index, $maxlength)
{
	if (isset($array[$index]))
	{
		$input = substr($array["{$index}"], 0, $maxlength);
		$input = mysql_real_escape_string($input);
		return ($input);
	}
	return NULL;
}
?>

调用方法:

 
<?php
$conn = mysql_connect('localhost', 'user', 'pass');

if(isset($_POST['username']))
{
	$_POST['username'] = mysqlClean($_POST, 'username', 20);
	echo $_POST['username'];
}
?>

将 $_POST 数组中的 ‘username’ 清洁并截取前20位字符。