1--addslashes
(PHP 4, PHP 5)
addslashes — 使用反斜线引用字符串
string addslashes ( string $str )
返回字符串,该字符串为了数据库查询语句等的需要在某些字符前加上了反斜线。这些字符是:
单引号(')、
双引号(")、
反斜线(\)
NUL(NULL 字符)。
一个使用 addslashes() 的例子是当你要往数据库中输入数据时。例如,将名字 O'reilly 插入到数据库中,这就需要对其进行转义。大多数据库使用 \ 作为转义符:O\'reilly。这样可以将数据放入数据库中,而不会插入额外的 \。当 PHP 指令 magic_quotes_sybase 被设置成 on 时,意味着插入 ' 时将使用 ' 进行转义。
默认情况下,PHP 指令 magic_quotes_gpc 为 on,它主要是对所有的 GET、POST 和 COOKIE 数据自动运行 addslashes()。不要对已经被 magic_quotes_gpc 转义过的字符串使用addslashes(),因为这样会导致双层转义。遇到这种情况时可以使用函数 get_magic_quotes_gpc()进行检测。
Example #1 addslashes() 例子
<?php
$str = "Is your name O'reilly?";
// 输出:Is your name O\'reilly?
echo addslashes($str);
?>
2--Stripslashes()
函数删除由addslashes() 函数生成的斜杠。
语法:
stripslashes(string)
string 必需的参数,是规定要检查的字符串。
提示和注释:
该函数用于清理从数据库或html表单中取回的数据。
例一:
<?php
echo stripslashes("Who\'s John Adams?");
?>
本例输出:
Who's John Adams?
addslashes()
函数在指定的预定义字符前添加反斜杠。
这些预定义字符是:
单引号(‘)
双引号(“)
反斜杠(\)
NULL
语法:
addslashes(string)
参数:
String必需。规定要检查的字符串。
提示:
该函数 可用于为储存在数据库中的字符串 以及 数据库查询语句准备合适的字符串。
注释:
默认情况下,PHP 指令 magic_quotes_gpc 为 on,意味着插入数据库中会自动转换,对所有的GET、POST 和 COOKIE 数据自动运行 addslashes()。不要对已经被 magic_quotes_gpc 转义过的字符串使用 addslashes(),因为这样会导致双层转义。遇到这种情况时可以使用函数get_magic_quotes_gpc() 进行检测。
如果get_magic_quotes_gpc为0,则表示未启用,此时POST/GET/COOKIE中的敏感字符就不会自动转义,此时就调用addslashes
例二:
测试在本例中,我们要向字符串中的预定义添加反斜杠:
<?php
$str = "Who's John Adams?";
echo $str . " This is not safe in a database query.<br />";
echo addslashes($str) . " This is safe in a database query.";
?>
本例输出:
Who's John Adams? This is not safe in a database query.
Who\'s John Adams? This is safe in a database query.
向mysql写入数据
当magic_quotes_gpc = On时,系统会自动处理单引号等问题,用不用addslashes()和stripslashes()都没关系,但是如果添加数据时用了addslashes(),那么显示数据时必须要stripslashes()。
当magic_quotes_gpc = Off时,系统不会处理单引号等问题,所以插入数据时必须要使用addslashes(),显示数据时则不需要使用stripslashes()。
既然有了分析,做程序时要怎么办呢?
根据以上两种情况,可得:
不管magic_quotes_gpc是On还是Off,添加数据时都用addslashes(),当On时,必须使用stripslashes(),Off时则不能用stripslashes()。
如何判断On还是Off呢?用get_magic_quotes_gpc()。
例三:
<?php
//$content 从数据库里读取内容
if(get_magic_quotes_gpc()){ $Content=stripslashes($Content); }
echo $Content;
?>