就函数名称来说他们的区别:stripslashes(剥离斜线)addslashes(添加斜线)
stripslashes(string $str)简单说就是剥离或转化$str字串中的斜线,官方的话说就是反引用一个引用字串.一个简单的例子:echo stripslashes("Is your name O\'reilly?");//Is your name O'reilly?
addslashes(string $str)相反,就是添加斜线,官方的说法就是使用反斜线引用字符串.一个简单的例子:echo addslashes("Is your name O'reilly?");//Is your name O\'reilly?
使用场景:其实这两个函数主要使用在一些需要转化特殊字符的数据处理中,比如数据库操作,在写入数据库的时候,我们需要把单引号这样的特殊字符转义之后保存,而在读取的时候,我们又需要把数据库中的这些被转义的特殊字符反转义回来.
他们具体的用法及注意的地方可以参看PHP文档
php中addslashes函数与sql防注入.具体分析如下:
addslashes可会自动给单引号,双引号增加\\\\\\,这样我们就可以安全的把数据存入数据库中而不黑客利用,参数'a..z'界定所有大小写字母均被转义,代码如下:
复制代码 代码如下:
echo addcslashes('foo[ ]','a..z'); //输出:foo[ ]
$str="is your name o'reilly?"; //定义字符串,其中包括需要转义的字符
echo addslashes($str); //输出经过转义的字符串
定义和用法:addslashes() 函数在指定的预定义字符前添加反斜杠.
这些预定义字符是:单引号 ('),双引号 ("),反斜杠 (),null
语法:addslashes(string),当然这个函数更安全,实例代码如下:
$str="a href='test'test/a"; //定义包含特殊字符的字符串
$new=htmlspecialchars($str,ent_quotes); //进行转换操作
echo $new; //输出转换结果
//不过输出时要用到
$str="jane 'tarzan'"; //定义html字符串
echo html_entity_decode($str); //输出转换后的内容
echo "br/";
echo html_entity_decode($str,ent_quotes); //有可选参数输出的内容
PHP addcslashes() 函数
定义和用法
addcslashes() 函数在指定的字符前添加反斜杠.
语法
addcslashes(string,characters)参数 描述
string 必需.规定要检查的字符串.
characters 可选.规定受 addcslashes() 影响的字符或字符范围.
提示和注释
注释:在对 0,r,n 和 t 应用 addcslashes() 时要小心.在 PHP 中,\0,\r,\n 和 \t 是预定义的转义序列.
实例
例子 1
在本例中,我们要向字符串中的特定字符添加反斜杠:
php
$str?=?"Hello,?my?name?is?John?Adams.";
echo?$str;
echo?addcslashes($str,'m');
echo?addcslashes($str,'J');
/*
输出:
Hello,?my?name?is?John?Adams.
Hello,?\my?na\me?is?John?Ada\ms.
Hello,?my?name?is?\John?Adams.
*/
PHP addslashes() 函数
addslashes() 函数在指定的预定义字符前添加反斜杠.
这些预定义字符是:
单引号 (')
双引号 (")
反斜杠 (\)
NULL
addslashes(string)参数 描述
提示:该函数可用于为存储在数据库中的字符串以及数据库查询语句准备合适的字符串.
注释:默认情况下,PHP 指令 magic_quotes_gpc 为 on,对所有的 GET、POST 和 COOKIE 数据自动运行 addslashes().不要对已经被 magic_quotes_gpc 转义过的字符串使用 addslashes(),因为这样会导致双层转义.遇到这种情况时可以使用函数 get_magic_quotes_gpc() 进行检测.
例子
在本例中,我们要向字符串中的预定义字符添加反斜杠:
$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.他们都有对应的去除他们添加的反斜杠的方法,分别是:stripcslashes()和stripslashes().
php 语言里,对于反斜杠的处理有 addslashes() 和 stripslashes(),两者的作用正好相反:
addslashes():对输入字符串中的某些预定义字符前添加反斜杠,这样处理是为了数据库查询语句等的需要.这些预定义字符是:单引号 (') ,双引号 (") ,反斜杠 (\) ,NULL.
stripslashes():删除由 addslashes() 函数添加的反斜杠.该函数用于清理从数据库或 HTML 表单中取回的数据.(若是连续二个反斜杠,则去掉一个,保留一个;若只有一个反斜杠,就直接去掉.)
addslashes
--
使用反斜线引用字符串
string
(
str
)
返回字符串,该字符串为了数据库查询语句等的需要在某些字符前加上了反斜线.这些字符是单引号(')、双引号(")、反斜线(\)与
NUL(NULL
字符).
一个使用
addslashes()
的例子是当你要往数据库中输入数据时.例如,将名字
O'reilly
插入到数据库中,这就需要对其进行转义.大多数据库使用
\
作为转义符:O\'reilly.这样可以将数据放入数据库中,而不会插入额外的
\.当
PHP
指令
magic_quotes_sybase
被设置成
on
时,意味着插入
'
时将使用
进行转义.
默认情况下,PHP
magic_quotes_gpc
为
on,它主要是对所有的
GET、POST
和
COOKIE
数据自动运行
addslashes().不要对已经被
转义过的字符串使用
addslashes(),因为这样会导致双层转义.遇到这种情况时可以使用函数
get_magic_quotes_gpc()
进行检测.
本文实例讲述了PHP中使用addslashes函数转义的安全性原理分析.分享给大家供大家参考.具体分析如下:
先来看一下ECshop中addslashes_deep的原型
复制代码
代码如下:function
addslashes_deep($value)
{
if
(empty($value))
return
$value;
//如为空,直接返回;
}
else
is_array($value)
array_map('addslashes_deep',
$value):
addslashes($value);
//递归处理数组,直至遍历所有数组元素;
addslashes_deep函数本身没有问题,但使用时得注意一点
恰好今天也是在网上看到了有人发了关于使用这个函数使用的BUG注入漏洞
这个函数在引用回调函数addslashes时,只对数据的值进行转义,所以如果使用者在此过程中引用数组的键进行特定处理时,存在$key注入风险,此时可更改addslashes_deep函数,使其同时对键值进行转义,或者使用时明确不引用键内容.
希望本文所述对大家的PHP程序设计有所帮助.
以上就是土嘎嘎小编为大家整理的php的addslashes相关主题介绍,如果您觉得小编更新的文章只要能对粉丝们有用,就是我们最大的鼓励和动力,不要忘记讲本站分享给您身边的朋友哦!!