您的位置:首页 > 编程语言 > PHP开发

PHP 格式化字符串函数:addslashes()和stripslashes()

2017-10-23 23:52 501 查看

PHP 格式化字符串以便存储:addslashes()和stripslashes()函数

除了使用字符串函数来重新格式化一个可见的字符串之外,也可以使用其中的一些函数来重新格式化字符串,以便将其存入数据库。对于字符串来说,某些字符肯定是有效的,但是当将数据插入到数据库中的时候可能会引起一些问题,因为数据库会将这些字符解释成控制符。这些有问题的字符就是引号(单引和双引)、反斜杠(\)和NULL字符。

我们需要找到一种标记或是转义它们的办法,以便使像MySQL这样的数据库能够理解我们表示的是有实际意义的特殊文本字符,而不是控制序列。为了将这些字符进行转义处理,可以在它们前面加一个反斜杠。例如,”(双引号)就变成\”(反斜杠双引号),\(反斜杠)就变成\(反斜杠反斜杠)。(这个规则对所有特殊字符都通用,所以,如果在字符串中存在\字符,就需要用\\进行替换。)

PHP提供了两个专门用于转义字符串的函数。在将任何字符串写到数据库之前,如果你的PHP的默认配置还没有启用该功能,你应该使用addslashes()将它们重新格式化,例如:

$feedback=addslashes(trim($_POST['feedback']));


和许多其他字符串函数一样,addslashes()函数需要一个字符串作为输入参数,经过该函数处理,将返回一个重新格式化后的字符串。

例子:

<?php

$str = "He told me:'Hello world! but I don't have any money!'";

echo $str."<br>";

$str_addslashes = addslashes($str);

//输出经过addslashes()处理的字符串
echo $str_addslashes."<br>";

$str_stripslashes = stripslashes($str_addslashes);

//输出经过stripslashes()处理的字符串
echo $str_stripslashes;

?>


输出:

//未处理的字符串
He told me:'Hello world! but I don't have any money!'

//输出经过addslashes()处理的字符串
He told me:\'Hello world! but I don\'t have any money!\'

//输出经过stripslashes()处理的字符串
He told me:'Hello world! but I don't have any money!'


调用addslashes()后,所有引号将被加上反斜杠,而Stripslashes()会移除这些反斜杠

这个功能是由magic_quotes_gpc配置指令控制的。如今,在PHP新版本的默认安装情况下,该指令是关闭的。gpc表示GET、POST和cookie,是第一个字母的组合。这就意味着,来自这些方法或方式的变量将被自动包括在引号内。使用get_magic_quotes_gpc()函数,可以检查系统上的这个指令是否已经启用,如果来自这些方法的变量被自动引用在引号中,该函数将返回true。如果系统上该指令为启用的,在显示用户数据之前,必须调用stripslashes()函数;否则,这些反斜杠会被显示出来。

注:

当magic_quotes_gpc=On的时候,函数get_magic_quotes_gpc()就会返回1

当magic_quotes_gpc=Off的时候,函数get_magic_quotes_gpc()就会返回0
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息