当前位置: 首页 > web开发 > PHP > 正文

PHP如何自动转义和还原字符串

时间:2017-01-05

实例1

<head>
<metahttp-equiv="Content-Type"content="text/html; charset=gb2312">
<title>自动对字符串进行转义和还原</title>
<styletype="text/css">
<!--
body {
background-color: #FFCCFF;
}
-->
</style></head>

<body>
<?php
$str ="select * from tb_book where bookname = 'PHP项目开发全程实录'";
echo $str."<br>";
$a = addslashes($str);//对字符串中的特殊字符进行转义
echo $a."<br>";//输出转义后的字符
$b = stripslashes($a);//对转义后的字符进行还原
echo $b."<br>";//将字符原义输出
?>
</body>
</html>

运行结果:

select * from tb_book where bookname = 'PHP项目开发全程实录'

select * from tb_book where bookname = \'PHP项目开发全程实录\'

select * from tb_book where bookname = 'PHP项目开发全程实录'

实例2

  <!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" 
"http://www.w3.org/TR/html4/loose.dtd">
<html>
<head>
<metahttp-equiv="Content-Type"content="text/html; charset=gb2312">
<title>对指定范围的字符串进行转义、还原</title>
<styletype="text/css">
<!--
body {
background-color: #FFCCCC;
}
-->
</style></head>
<body>
<?php
$a="编程体abc’验网";//对指定范围内的字符进行转义
$b=addcslashes($a,"编程体验网");//转义指定的字符串
echo "转义字符串:".$b;//输出转义后的字符串
echo "<br>";//执行换行
$c=stripcslashes($b);//对转义的字符串进行还原
echo "还原字符串:".$c;//输出还原后的转义字符串
?>
</body>
</html>

运行结果:

转义字符串:\261\340\263\314\314\345abc’\321\351\315\370

还原字符串:编程体abc’验网

运行说明

1、addslashes函数说明

string addslashes ( string $str )

返回字符串,该字符串为了数据库查询语句等的需要在某些字符前加上了反斜线。这些字符是单引号(')、双引号(")、反斜线(\)与 NUL(NULL 字符)。

一个使用addslashes()的例子是当你要往数据库中输入数据时。例如,将名字 O'reilly 插入到数据库中,这就需要对其进行转义。

强烈建议使用DBMS指定的转义函数(比如MySQL是mysqli_real_escape_string()),但是如果你使用的DBMS没有一个转义函数,并且使用\来转义特殊字符,你可以使用这个函数。

仅仅是为了获取插入数据库的数据,额外的\并不会插入。

当PHP指令magic_quotes_sybase被设置成on时,意味着插入'时将使用'进行转义。

PHP5.4之前PHP指令magic_quotes_gpc默认是on,实际上所有的GET、POST 和COOKIE数据都被addslashes()了。不要对已经被magic_quotes_gpc转义过的字符串使用addslashes(),因为这样会导致双层转义。遇到这种情况时可以使用函数 get_magic_quotes_gpc() 进行检测。

参数 

str

要转义的字符。

返回值 

返回转义后的字符。

2、stripslashes函数说明

string stripslashes ( string $str )

反引用一个引用字符串。

Note: 

如果magic_quotes_sybase项开启,反斜线将被去除,但是两个反斜线将会被替换成一个。

一个使用范例是使用PHP检测magic_quotes_gpc配置项的开启情况(在PHP5.4之前默认是开启的)并且你不需要将数据插入到一个需要转义的位置(例如数据库)。

例如,你只是简单地将表单数据直接输出。

参数 

str

输入字符串。

返回值 

返回一个去除转义反斜线后的字符串(\' 转换为 ' 等等)。双反斜线(\\)被转换为单个反斜线(\)。

3、addcslashes 函数说明

string addcslashes ( string $str , string $charlist )

返回字符串,该字符串在属于参数charlist列表中的字符前都加上了反斜线。

参数

str

要转义的字符。

charlist

如果charlist中包含有 \n,\r 等字符,将以C语言风格转换,而其它非字母数字且ASCII码低于32以及高于126的字符均转换成使用八进制表示。

当定义charlist参数中的字符序列时,需要确实知道介于自己设置的开始及结束范围之内的都是些什么字符。

返回值

返回转义后的字符。

4、stripcslashes函数说明

string stripcslashes ( string $str )

返回反转义后的字符串。可识别类似 C 语言的 \n,\r,... 八进制以及十六进制的描述。

参数 

str

需要反转义的字符串。

返回值 

返回反转义后的字符串。

来源:http://cakin24.iteye.com/blog/2348605