目录
【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 '<a href='test' class="tacks">Test</a>' (length=59)
string '<a href='test' class="tacks">Test</a>' (length=69)
string '<a href='test' class="tacks">Test</a>' (length=49)
*/
- htmlspecialchars_decode — 将特殊的 HTML 实体转换回普通字符
作用:
此函数的作用和 htmlspecialchars() 刚好相反。它将特殊的HTML实体转换回普通字符。
函数:
htmlspecialchars_decode ( string $string [, int $flags ]) : string
参数:
$string 要解码的字符串 $flags 位掩码,默认转化双引号,以HTML4.01
返回值:
返回解码后的字符串。
$str = "<a href='test' class="tacks">Test</a>";
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/>';
【小结】
- addslashes 在单引号(')、双引号(")、反斜线(\)前加上反斜线。
- stripslashes 返回去除转义反斜线后的字符串。
- addcslashes 使用反斜线转义字符串中的字符,可以自己选择在什么字符前面添加反斜线。
- stripcslashes 返回去除斜线后的字符串同时要注意stripcslashes会去除预定义的转义序列,例如 \0,\r,\n,\t ,\a,\b,\f,和 \v。
- htmlspecialchars 将特殊字符(将与、单双引号、大于和小于号)转换为 HTML 实体。
- htmlspecialchars_decode 将特殊的 HTML 实体转换回普通字符。
- htmlentities 将所有字符都转成HTML格式。
- html_entity_decode 返回HTML 实体转换为字符与htmlentities互为反函数。
- quotemeta 返回元字符集(. \ + * ? [ ^ ] ( $ ) )的字符前面添加反斜线后的字符串。
- nl2br 在字符串所有新行之前插入 HTML 换行标记。
- strip_tags 从字符串中去除 HTML 和 PHP 标记。