为什么要将HTML标签相关的字符串格式化?
HTML中的表单是收集用户数据提交给服务器的主要途径,如果处理不会被黑客利用成为攻击服务器的入口。例如在用户发布文章时,文章如果包括HTML标记或者JavaScript页面转向的代码,如果直接输出的话会使页面布局发生改变。这些代码不做处理会被浏览器理解成有效代码去解释。所以在php中,对用户提交的数据内容一定要先处理。我们可以用PHP中HTML相关的字符串格式化函数,有效控制HTML文本输出。
函数nl2br()
在浏览器中输出的字符串只能通过HTML的“
”标记换行,也有很多人习惯使用“\n”作为换行符号,但是浏览器并不识别这个字符串换行符。即使有多行文本,在浏览器中显示只有一行。nl2br()函数就是在字符串的每个新行“\n”之前插入HTML换行符“
”。比如:echo nl2br("first line,\n second line");。
函数htmlspecialchars()
如果不希望浏览器直接解析HTML标记,需要把HTML标记中的特殊字符转换成HTML实体。例如,将"”装换为“>”。这样HTML标记浏览器就不会去解析,而是将HTML文本在浏览器中原样输出。php中提供的htmlspecialchars()函数就可以将一些预定义的字符转换为HTML实体。此函数用在预防使用者提供的文字中包含了HTML的标记,像是布告栏或是访客留言板这方面的应用。它可以转换的字符:
“&”(和号)转换为“&;”。
““”(双引号)转换为“";”。
“‘’”(单引号)换为“';”。
“
">"(大于号)转换为“>”。
函数htmlspecialchars()有三个参数,第一个参数是必选函数。第二个参数是可选参数,用来决定引号的转换方式。(ENT_COMPAT转换双引号,保留单引号;ENT_QUOTES同时转换两种引号;ENT_NOQUOTES不对引号转换。)第三个参数是可选的值,用于指定处理的字符串的字符集,默认的字符集是“ISO8859-1”.其他的可以使用的合法字符集
htmlentities()函数
htmlentities()函数可以将所有非ASCII码转换为对应的实体代码。htmlentities()函数和htmlspecialchars()函数使用语法格式一致,单该函数可以转义更多的HTML字符。
strip_tags函数
函数htmlspecialchars()可以将HTML中的标记符号转换为对应的HTML实体,有时可以直接删除用户输入的HTML标签,也是很有必要的。PHP提供的strip_tags函数默认就是可以删除字符串中的所有的HTML标签,也可以有选择性的删除一些HTML标记。比如说公告栏或者访客留言,比如说在论坛发布文章时,可以预留一些可以改变文字大小、颜色、粗体和斜体等HTML标记,而删除一些对页面布局有影响的HTML标记。
有一些函数文章中没有提到,欢迎大家补充。每天学习一个知识点,每日寄语“滴水穿石,不是力量大,而是功夫深。”
领取专属 10元无门槛券
私享最新 技术干货