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>:相见语依依。&'渭川田家'<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()函数