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>

  

  • 刷新瀏覽器后效果如下圖

 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM