zoukankan      html  css  js  c++  java
  • HTML转义

    HTML转义

    • 模板对上下文传递的字符串进行输出时,会对以下字符自动转义
    小于号< 转换为&lt;
    
    大于号> 转换为&gt;
    
    单引号' 转换为&#39;
    
    双引号" 转换为 &quot;
    
    与符号& 转换为 &amp;
    

    示例

    • 打开booktest/views.py文件,创建视图zhuanyi
    def zhuanyi(request):
        context={'content':'<h1>hello world</h1>'}
        return render(request,'booktest/zhuanyi.html',context)
    

      

    • 打开booktest/urls.py文件,配置url
    url(r'^zhuanyi/$', views.zhuanyi),
    

      

    • 在templates/booktest/目录下创建zhuanyi.html
    <html>
    <head>
        <title>转义</title>
    </head>
    <body>
    自动转义:{{content}}
    </body>
    </html>
    

      

    • 运行服务器,在浏览器中输入如下网址
    http://127.0.0.1:8000/zhuanyi/
    
    • 转义后标记代码不会被直接解释执行,而是被直接呈现,防止客户端通过嵌入js代码攻击网站
    • 浏览效果如下图

    关闭转义

    • 过滤器escape可以实现对变量的html转义,默认模板就会转义,一般省略
    {{t1|escape}}
    

      

    • 过滤器safe:禁用转义,告诉模板这个变量是安全的,可以解释执行
    {{data|safe}}
    

      

    • 修改templates/booktest/zhuanyi.html代码如下
    <html>
    <head>
        <title>转义</title>
    </head>
    <body>
    自动转义:{{content}}
    <hr>
    过滤器safe关闭转义:{{content|safe}}
    </body>
    </html>
    

      

    • 刷新浏览器后效果如下图

    • 标签autoescape:设置一段代码都禁用转义,接受on、off参数
    {%autoescape off%}
    ...
    {%endautoescape%}
    

      

    • 修改templates/booktest/zhuanyi.html代码如下
    <html>
    <head>
        <title>转义</title>
    </head>
    <body>
    自动转义:{{content}}
    <hr>
    过滤器safe关闭转义:{{content|safe}}
    <hr>
    标签autoescape关闭转义:
    {%autoescape off%}
    {{content}}
    {%endautoescape%}
    </body>
    </html>
    

      

    • 刷新浏览器后效果如下图

    字符串字面值

    • 对于在模板中硬编码的html字符串,不会转义
    • 修改templates/booktest/zhuanyi.html代码如下
    <html>
    <head>
        <title>转义</title>
    </head>
    <body>
    自动转义:{{content}}
    <hr>
    过滤器safe关闭转义:{{content|safe}}
    <hr>
    标签autoescape关闭转义:
    {%autoescape off%}
    {{content}}
    {%endautoescape%}
    <hr>
    模板硬编码不转义:{{data|default:'<b>hello</b>'}}
    </body>
    </html>
    

      

    • 刷新浏览器后效果如下图

    • 如果希望出现转义的效果,则需要手动编码转义

    • 修改templates/booktest/zhuanyi.html代码如下

    <html>
    <head>
        <title>转义</title>
    </head>
    <body>
    自动转义:{{content}}
    <hr>
    过滤器safe关闭转义:{{content|safe}}
    <hr>
    标签autoescape关闭转义:
    {%autoescape off%}
    {{content}}
    {%endautoescape%}
    <hr>
    模板硬编码不转义:{{data|default:'<b>hello</b>'}}
    <hr>
    模板硬编码手动转义:{{data|default:"<b>123</b>"}}
    </body>
    </html>
    

      

    • 刷新浏览器后效果如下图

  • 相关阅读:
    【Python】ModuleNotFoundError: No module named 'matplotlib.pyplot'
    【DB2】DB2使用IMPORT命令导入含有自增长列的表报错处理
    ~~
    汉字的unicode码范围是多少?
    字符编码(ASCII,Unicode和UTF-8) 和 大小端(zz)
    是否 whether ,if
    定语从句:
    by,with
    C++中extern “C”含义深层探索
    安装Office2007时出现1706错误的解决方案
  • 原文地址:https://www.cnblogs.com/yoyo1216/p/10131010.html
Copyright © 2011-2022 走看看