Html中的标签 转换为转义字符

2017-05-05 · 🙈Lei · 0条 · 708次

最近有一个需求,需要把Html代码转义,得到转义后的代码。用PHP来写,没有太多的代码要求,下面列一下转义过程和几个关键的函数:

  1. 把待转义字符转义
    htmlspecialchars() 函数可以把预定义的字符转换为 HTML 实体。使用该函数输出的标签是转义后的字符。执行下面的代码
    $result = htmlspecialchars('<div>转义测试</div>'); 
    file_put_contents(dirname(__FILE__).'/1.txt', $result); 
    echo "$result";exit; 
    打开1.txt可以看到转义后得到的结果为:
    <div>转义测试</div> 
    但是将htmlspecialchars()执行的结果输出到屏幕上时,显示的结果是<div>转义测试</div>,所以,虽然正确转义了,但是输出出来的时候我们仍然看不到应该看到的结果,因为得到的是html实体,放到网页中,仍然会被解释为html标签。
  2. 将转义后得到的结果输出
    为了解决上面的问题,把输出的内容也显示为转义后的内容,我们需要将上面的内容再次执行一遍htmlspecialchars() 函数,这样就会把上面的html实体结果当做字符串进行转换,转换得到的也是字符串,这样再输出的时候,就不会是html标签了。
    执行下面的代码
    $result = htmlspecialchars(htmlspecialchars('<div>转义测试</div>')); echo "$result";exit;
    得到的结果是:
    &lt;div&gt;转义测试&lt;/div&gt;
    这就是我们希望看到的样子了。但是现在还有另外几个问题,首先空格不会被转义,所以打印出来的时候显示不出来缩进,其次,当有多行的时候,转换完成后就会显示成一行,换行符就消失了。
  3. 显示空格
    要想显示出空格,需要把空格转换为。使用str_replace()方法,可以实现这一操作。
    使用下面的代码即可:
    $result = str_replace(' ', '&nbsp;', htmlspecialchars(htmlspecialchars('<div>转义测试</div>')));
  4. 还原换行
    还原换行需要nl2br()这个方法,该方法是在新行之前加上换行符<br>。
    使用下面的代码
    $result = nl2br(str_replace(' ', '&nbsp;', htmlspecialchars(htmlspecialchars('<div>转义测试</div>')))); 
    echo "$result";exit;
    这样就可以将Html代码中的<,>等特殊字符进行转义显示出来,而格式不会发生变化。
5.实例
上面是PHP的核心实现思路,下面截图是我做出的成品的截图,使用的就是上面介绍的方法。


  0