1.什么是 html 标签,html 实体
.
html标签 | 描述 | html实体 |
< | less than | < |
> | great than | > |
.
2.为什么需要转换
比如我们要在浏览器里显示代码,浏览器会把它当作 html 标签语言直接执行,解决方法就是将 html 标签转变为 html 实体再编写到代码中.
比如我们要显示<script>alert(1)</script>, 那么我们的代码中应该这样写:<script>alert(1)</script>。
既然代码<script>alert(1)</script>显示的是<script>alert(1)</script>, 那么如果要显示<script>alert(1)</script>; 又应该写怎么样的代码呢?
道理很简单,一段文本,如果在页面中的显示跟代码不一致,那说明肯定是里面包含了html的关键字,比如上一段代码中就包含了关键字&,如果想要在浏览器中显示&(html关键字),则需要在代码中用它对应的实体来替换掉,&的实体为&, 因此要显示<script>alert(1)</script>,需要的代码为&lt;script&gt;alert(1)&lt;/script&gt;
关于html实体的说明及列表:http://baike.baidu.com/view/4757776.htm#3
3.php html系列函数
htmlspecialchars_decode()和html_entity_decode()将html实体转换为html标签,
htmlspecialchars()和htmlentities()将html标签转换为html实体。
<?php //首先声明一个变量并将一个带有html标签的字符串赋值给它 $a = "<script>alert(1);</script>"; echo $a; //弹出一个弹出框 echo htmlentities($a); // 输出 <script>$nbspalert(1)</script> 浏览器中显示 <script> alert(1) </script> echo htmlspecialchars($a); //同上 echo htmlspecialchars(htmlspecialchars($a)); // 输出&lt;script&gt;$amp;nbspalert(1)&lt;/script&gt;浏览器中显示 <script>$nbspalert(1)</script> 以此类推 $b = htmlspecialchars(htmlspecialchars($a)); //注意,实际上 $b 的值为&lt;script&gt;$amp;nbspalert(1)&lt;/script&gt; echo htmlspecialchars_decode($b); // 输出 <script>$nbspalert(1)</script> 浏览器中显示 <script> alert(1) </script>
4.get_html_translation_table()函数
作用:函数返回 htmlentities() 和 htmlspecialchars() 函数使用的翻译表。
<?php print_r (get_html_translation_table(HTML_SPECIALCHARS)); ?>
<?php print_r (get_html_translation_table(HTML_ENTITIES)); ?>