PHP入门很轻松(微课超值版)
上QQ阅读APP看书,第一时间看更新

5.3.3 与HTML标签相关的字符串格式化

HTML中的表单和URL上附加资源是用户将数据提交给服务器的途径,如果不能很好地处理,就有可能成为黑客攻击服务器的入口。例如,用户在发布文章时,在文章中如果包含一些HTML格式标记或JavaScript的页面转向等代码,直接输出显示则一定会使页面的布局发生改变。因为这些代码被发送到浏览器中,浏览器会按有效的代码去解释。所以在PHP脚本中,对用户提交的数据内容一定要先处理。PHP中提供了非常全面的HTML相关的字符串格式化函数,可以有效地控制HTML文本的输出。

1.nl2br()函数

在浏览器中输出的字符串“<br />”标记换行,而很多人习惯使用“\n”作为换行符号,但浏览器中不识别“\n”的换行符。即使有多行文本,在浏览器中也只显示一行。nl2br()函数就是在字符串中的每个新行“\n”之前插入HTML换行符“<br />”。

例如下面代码:

<?php
echo nl2br("明月几时有?把酒问青天.\n 不知天上宫阙,今夕是何年.");  //在"\n"前加上"<br />"标记
?>

运行结果输出如下:

明月几时有?把酒问青天。

不知天上宫阙,今夕是何年。

2.htmlspecialchars()函数

有时不希望浏览器直接解析HTML标记,就需要将HTML标记中的特殊字符转换成HTML实体。例如,将“<”转换为“<”,将“>”转换为“>”,这样HTML标记在浏览器中就不会被解析,而是将HTML文本在浏览器中原样输出。PHP中提供的htmlspecialchars()函数就可以将一些预定义的字符串转换为HTML实体。

htmlspecialchars()函数语法格式如下:

htmlspecialchars(string,flags,character-set,double_encode)

htmlspecialchars()函数的参数说明如表5-4所示。

表5-4 htmlspecialchars()函数的参数说明

此函数用在预防使用者提供的文字中包含HTML标记,例如像是布告栏或访客留言板方面的应用。以下是该函数可以转换的预定义的字符:

(1)“&”(和号)转换为“&”。

(2)“"”(双引号)转换为“"”。

(3)“'”(单引号)转换为“'”。

(4)“<”(小于)转换为“<”。

(5)“>”(大于)转换为“>”。

【例5-6】htmlspecialchars()函数的应用(实例文件:源文件\ch05\5.6.php)。

运行结果如图5-6所示。

在浏览器中查看源码,结果如下所示:

<b>田夫荷锄至</b>:相见语依依。&'渭川田家'<br /><b>田夫荷锄至</b>:相见语依依。&&#039;渭川田家&#039;<br /><b>田夫荷锄至</b>:相见语依依。&'渭川田家'

3.strip_tags()函数

PHP中提供的strip_tags()函数默认就可以删除字符串中所有的HTML标签,也可以有选择性地删除一些HTML标记。例如用户在论坛中发布文章时,可以预留一些可以改变字体大小、颜色、粗体和斜体等的HTML标记,而删除一些对页面布局有影响的HTML标记。strip_tags()函数的语法格式如下:

strip_tags(string,allow)

其中string表示要检查的字符串,allow参数是一个可选的HTML标签列表,放入该列表中的HTML标签将被保留,其他的则全部被删除,默认是将所有HTML标签都删除。

例如,保留“<b></b>”标签,代码如下:

<?php
echo strip_tags("从今若许闲乘月 <b><i><>拄杖无时夜叩门</i></b>","<b>");  //保留<i>标签
?>

运行结果如图5-7所示。

图5-6 htmlspecialchars()函数

图5-7 strip_tags()函数