PHP字符串转义相关函数

目录

【1】addslashes与stripslashes

【2】addcslashes与stripcslashes

【3】htmlspecialchars与htmlspecialchars_decode

【4】quotemeta— 下面这些特殊字符前加 反斜线(\) 转义后的字符串。

【5】nl2br — 在字符串所有新行之前插入 HTML 换行标记

【6】 strip_tags — 从字符串中去除 HTML 和 PHP 标记

【小结】

【1】addslashes与stripslashes

  • addslashes 使用反斜线引用字符串
作用:
	返回字符串,该字符串为了数据库查询语句等的需要在某些字符前加上了反斜线。
    这些字符是单引号(')、双引号(")、反斜线(\)与 NULL(NULL 字符)。
函数:
	addslashes ( string $str ) : string
参数:
	$str 要转义的字符。
返回值:
	返回转义后的字符。
备注:
	默认情况下,PHP 指令 magic_quotes_gpc 为 on.
    对所有的 GET、POST 和 COOKIE 数据自动运行 addslashes()。
    不要对已经被 magic_quotes_gpc 转义过的字符串使用 addslashes(),因为这样会导致双层转义。
    遇到这种情况时可以使用函数 get_magic_quotes_gpc() 进行检测。
//addslashes
$str = 'select name from user where name=\'"\Tacks/" \' or 1';
echo $str,'<br/>'; #原始字符  会输出所有name
echo addslashes($str),'<br/>';#加上反斜线转义字符,防止非法进行sql语句
/*
select name from user where name='"\Tacks/" ' or 1
select name from user where name=\'\"\\Tacks/\" \' or 1
*/
如果 magic_quotes_gpc 为关闭时get_magic_quotes_gpc() 返回 0,否则返回 1。
在 PHP 5.4.O 起将始终返回 FALSE。
  • stripslashes — 反引用一个引用字符串 与addslashes互相对应。
作用:
	返回一个去除转义反斜线后的字符串(\' 转换为 ' 等等)。双反斜线(\\)被转换为单个反斜线(\)。
函数:
	stripslashes ( string $str ) : string
参数:
	$str 字符串。
返回:
	返回一个去除转义反斜线后的字符串。
备注:
	stripslashes() 可用于清理从数据库中或者从 HTML 表单中取回的数据。
	stripslashes() 是非递归的。如果你想要在多维数组中使用该函数,你需要使用递归函数。
$str = 'This is Tack\'s  \"Goods\" ! ';
echo $str,'<br/>';#原始字符串
echo stripslashes($str),'<br/>';#去除反斜线后的字符串
/*
This is Tack's \"Goods\" !
This is Tack's "Goods" ! 
*/

可以看一下addslashes和stripslashes作用正好相反,一个转义一个反转义

$str = 'TACKS\'s \"OKAY\" ';
echo $str,'<br/>';
$str = addslashes($str);
echo $str,'<br/>';
echo stripslashes($str),'<br/>';
/*
TACKS's \"OKAY\"
TACKS\'s \\\"OKAY\\\"
TACKS's \"OKAY\" 
*/

【2】addcslashes与stripcslashes

  • addcslashes使用反斜线转义字符串中的字符
作用:
    返回字符串,该字符串在属于参数 charlist 列表中的字符前都加上了反斜线。
函数:
    addcslashes ( string $str , string $charlist ) : string
参数:
    $str:要转义的字符		$charlist 规定要转义的字符或字符范围。
返回值:
	转义后的字符串
备注:
	在对 0(NULL)、r(回车)、n(换行)、t(换页)、f(制表符)和 v(垂直制表符)应用 addcslashes() 时要小心。
    在 PHP 中,\0、\r、\n、\t、\f 和 \v 是预定义的转义序列。
$str = "update user set name='tacks's go ' where id=1 ";
echo $str,'<br/>';#原始字符
echo addcslashes($str,"'"),'<br/>';#在单引号前面加上反斜线
/*
update user set name='tacks's go ' where id=1
update user set name=\'tacks\'s go \' where id=1 
*/
  • stripcslashes反引用一个使用 addcslashes() 转义的字符串
作用:
	返回反转义后的字符串。可识别类似 C 语言的 \n,\r,... 八进制以及十六进制的描述。
函数:
	stripcslashes ( string $str ) : string
参数:
	$str 需要反转义的字符串。
返回值:
	返回反转义后的字符串。
备注:
	stripslashes只去除反斜号,而stripcslashes会去除预定义的转义序列,
        例如 \0,\r,\n,\t ,\a,\b,\f,和 \v。
$str = 'This is Tack\'s  \"Goods\" ! \n\r\t\0\f\v----\v0.0 \a\b';
echo $str,'<br/>'; #原始字符
echo stripcslashes($str),'<br/>';#会去除预定义的一些转义序列
/*
This is Tack's \"Goods\" ! \n\r\t\0\f\v----\v0.0 \a\b
This is Tack's "Goods" ! ----0.0
*/
  • 可以看一下这几个函数的区别:
$str = "Hey man, that's what I'm here for!";
echo $str,'<br/>';
echo addcslashes($str,"mia"),'<br/>';
$str = addcslashes($str,"mia") ;
echo stripcslashes($str),'<br/>';
echo stripslashes($str),'<br/>';
/*
Hey man, that's what I'm here for!
Hey \m\an, th\at's wh\at I'\m here for!
Hey mn, tht's wht I'm here for!
Hey man, that's what I'm here for!
*/

【3】htmlspecialchars与htmlspecialchars_decode

  • htmlspecialchars — 将特殊字符转换为 HTML 实体
作用:
	某类字符在 HTML 中有特殊用处,如需保持原意,需要用 HTML 实体来表达。 
        本函数会返回字符转义后的表达。
函数:
	htmlspecialchars ( string $string ,[int $flags, string $encoding, bool $double_encode]) : string
参数:
	$string 待转换的字符串;
	$flags  位掩码,设置转义处理细节,默认转换ENT_COMPAT双引号,以HTML4.01处理代码
	$encoding 字符集 默认UTF-8
	$double_encode 是否存在HTML实体 默认对每个实体转化
返回值:
	转换后的 string。如果指定的编码 encoding 里, string 包含了无效的代码单元序列, 
        没有设置 ENT_IGNORE 或者 ENT_SUBSTITUTE 标记的情况下,会返回空字符串。
$str="<a href='test' class=\"tacks\">Test</a>";
echo $str,'<br/>';
var_dump(htmlspecialchars($str));#默认,仅编码双引号
var_dump(htmlspecialchars($str, ENT_QUOTES));// 编码双引号和单引号
var_dump(htmlspecialchars($str,ENT_NOQUOTES));// 不编码任何引号
/*
string '&lt;a href='test' class=&quot;tacks&quot;&gt;Test&lt;/a&gt;' (length=59)
string '&lt;a href=&#039;test&#039; class=&quot;tacks&quot;&gt;Test&lt;/a&gt;' (length=69)
string '&lt;a href='test' class="tacks"&gt;Test&lt;/a&gt;' (length=49)
*/
  • htmlspecialchars_decode — 将特殊的 HTML 实体转换回普通字符
作用:
	此函数的作用和 htmlspecialchars() 刚好相反。它将特殊的HTML实体转换回普通字符。
函数:
	htmlspecialchars_decode ( string $string [, int $flags ]) : string
参数:
	$string 要解码的字符串  $flags 位掩码,默认转化双引号,以HTML4.01
返回值:
	返回解码后的字符串。
$str = "&lt;a href='test' class=&quot;tacks&quot;&gt;Test&lt;/a&gt;";
echo $str,'<br/>';
var_dump(htmlspecialchars_decode($str));
/*
<a href='test' class="tacks">Test</a>
string '<a href='test' class="tacks">Test</a>' (length=37)
*/
  • htmlentities— 将字符转换为 HTML 转义字符本函数各方面都和 htmlspecialchars() 一样, 除了 htmlentities() 会转换所有具有 HTML 实体的字符,可能导致中文乱码,需要注意encoding参数的添加。
  •  html_entity_decode()函数把HTML实体转化为字符,与htmlentities()函数的反函数。
  • get_html_translation_table()返回使用 htmlspecialchars() 和 htmlentities() 后的转换表。

【4】quotemeta— 下面这些特殊字符前加 反斜线(\) 转义后的字符串。

作用:
	返回 在下面这些特殊字符前加 反斜线(\) 转义后的字符串。 
        这些特殊字符包含:. \ + * ? [ ^ ] ( $ )
函数:
	quotemeta ( string $str ) : string
参数:
	$str 输入字符串
返回值:
	返回元字符集被转义后的字符串,如果输入字符串str为空, 则返回 FALSE。
$str = "Hello world. (can you hear me?) [I am Tacks]";
echo quotemeta($str);
/*
Hello world. (can you hear me?) [I am Tacks]
Hello world\. \(can you hear me\?\) \[I am Tacks\]
*/

【5】nl2br — 在字符串所有新行之前插入 HTML 换行标记

作用:
	在字符串 string 所有新行之前插入 '<br />' 或 '<br>',并返回。 
函数:
	nl2br ( string $string [, bool $is_xhtml = TRUE ] ) : string
参数:
	$string  输入字符串。 $is_xhtml 是否使用 XHTML 兼容换行符。
返回值:
	返回调整后的字符串。
备注:
	字符串$string要用双引号才可以。换行分割符都行例如 \r \n
$str = "I am Tacks \n This is My code!";
echo nl2br($str);#会在\n处 插入一个<br/>
echo nl2br($str,false);#会在\n处插入一个合法的 HTML 标记<br>
$str = "This\r is\n a string";
echo nl2br($str);#\r \n 都会进行插入换行标记
/*
I am Tacks This is My code!
I am Tacks
This is My code!
*/

【6】 strip_tags — 从字符串中去除 HTML 和 PHP 标记

作用:
	该函数尝试返回给定的字符串 str 去除空字符、HTML 和 PHP 标记后的结果。
函数:
	strip_tags ( string $str [, string $allowable_tags ] ) : string
参数:
	$str  输入字符串。 $allowable_tags 不被去除的字符列表。
返回值:
	返回处理后的字符串。
备注:
	HTML 注释和 PHP 标签也会被去除。这里是硬编码处理的,所以无法通过 allowable_tags 参数进行改变。
$text = '<p>Test paragraph.</p><a href="#">Other text</a>';
echo $text,'<br/>';
echo strip_tags($text),'<br/>';
echo strip_tags($text, '<p><a>'),'<br/>';

【小结】

  1. addslashes 在单引号(')、双引号(")、反斜线(\)前加上反斜线。
  2. stripslashes 返回去除转义反斜线后的字符串。
  3. addcslashes 使用反斜线转义字符串中的字符,可以自己选择在什么字符前面添加反斜线。
  4. stripcslashes 返回去除斜线后的字符串同时要注意stripcslashes会去除预定义的转义序列,例如 \0,\r,\n,\t ,\a,\b,\f,和 \v。
  5. htmlspecialchars 将特殊字符(将与、单双引号、大于和小于号)转换为 HTML 实体。
  6. htmlspecialchars_decode 将特殊的 HTML 实体转换回普通字符。
  7. htmlentities 将所有字符都转成HTML格式。
  8. html_entity_decode 返回HTML 实体转换为字符与htmlentities互为反函数。
  9. quotemeta 返回元字符集(. \ + * ? [ ^ ] ( $ ) )的字符前面添加反斜线后的字符串。
  10. nl2br 在字符串所有新行之前插入 HTML 换行标记。
  11. strip_tags 从字符串中去除 HTML 和 PHP 标记。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值