第一种,将单双引号等预定义字符进行转义
addslashes() 函数返回在预定义字符之前添加反斜杠的字符串。
stripslashes() 函数删除由 addslashes() 函数添加的反斜杠。
定义和用法
addslashes() 函数返回在预定义字符之前添加反斜杠的字符串。
预定义字符是:
- 单引号(')
- 双引号(")
- 反斜杠(\)
- NULL
提示:该函数可用于为存储在数据库中的字符串以及数据库查询语句准备字符串。
注释:默认地,PHP 对所有的 GET、POST 和 COOKIE 数据自动运行 addslashes()。所以您不应对已转义过的字符串使用 addslashes(),因为这样会导致双层转义。遇到这种情况时可以使用函数 get_magic_quotes_gpc() 进行检测。
第二种,
strip_tags(),如果有需要保留的,输入第二个参数
第三种,
htmlentities() ,有时如果纯字符串无法实体化成功
第四种,
PHP mysqli_real_escape_string() 函数会判断字符集;
mysqli_escape_string不考虑连接的当前字符集。
php连接mysql数据库后,在对数据库进行查询或插入操作时,为了防止恶意访问,通常对输入的字符串进行转义。
前一章介绍了mysql与mysqli的区别,如果采用mysql库连接数据库,转义函数有两个
mysql_real_escape_string(string,connection);//第一个参数为需转义字符串,第二个参数为数据库连接。
mysql_escape_string(string);//参数为需转义字符串
从以上函数的定义可以看出,前者需要先连接数据库,而后者不需要。但是mysql的转义方式在php5.3以上的版本中已经弃用,不推荐使用。
如果采用mysqli库连接数据库,转义函数也有两个
mysqli_real_escape_string(connection,escapestring);
mysqli_escape_string(connection,escapestring);
这两个函数完全一致,后者是前者的别名而已,第一个参数为数据库连接,第二个参数为需转义的字符串。该函数适用于php5以上的版本。
mysqli_real_escape_string()定义和用法
mysqli_real_escape_string() 函数转义 SQL 语句中使用的字符串中的特殊字符。
下列字符受影响:
- \x00
- \n
- \r
- \
- '
- "
- \x1a
如果成功,则该函数返回被转义的字符串。如果失败,则返回 false。
语法
mysqli_real_escape_string(string,connection)
参数 | 描述 |
---|---|
string | 必需。规定要转义的字符串。 |
connection | 可选。规定 MySQL 连接。如果未规定,则使用上一个连接。 |
说明
本函数将 string 中的特殊字符转义,并考虑到连接的当前字符集,因此可以安全用于 mysql_query()。
提示和注释
提示:可使用本函数来预防数据库攻击。
例子
<?php // 假定数据库用户名:root,密码:123456,数据库:RUNOOB $con=mysqli_connect("localhost","root","123456","RUNOOB"); if (mysqli_connect_errno($con)) { echo "连接 MySQL 失败: " . mysqli_connect_error(); } mysqli_query($con,"CREATE TABLE websites2 LIKE websites");$newname="菜鸟'教程";// 没有转义 $newname 中特殊字符,执行失败mysqli_query($con,"INSERT into websites2 (name) VALUES ('$newname')");// 转义特殊字符$newpers=mysqli_real_escape_string($con,$newname);// 转义后插入,执行成功mysqli_query($con,"INSERT into websites2 (name) VALUES ('$newpers')");mysqli_close($con);?>
第五种,
再不行,那就str_ireplace() 吧,替换掉那些不想要的