首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫
您现在的位置: 程式碼之家 >> 編程語言 >  >> 網頁程式設計 >> PHP 程式設計 >> PHP 綜合知識

ThinkPHP literal 標籤:防止模板引擎誤解析 JS/變數語法完整指南

     編輯:PHP 綜合知識

問題場景

ThinkPHP 模板引擎以 {$var}、<if> 等標籤解析輸出。若頁面包含 Vue/React 模板語法、原生 JS 物件字面量、或需原樣輸出 {$Think.config.xxx},會被誤判導致錯誤或資料洩露。

<literal> 標籤用法

將需「原樣輸出」的區塊包裹:

<literal>
  <if condition="$name eq 1"> value1
  <elseif condition="$name eq 2"/> value2
  <else /> value3
  </if>
</literal>

上述 <if> 將作為純文字輸出,不被解析。

常見應用場景

1. 前端框架模板語法共存

<div id="app">
  <literal>
    {{ message }} @{{ vueVar }} {{ angularExpr }}
  </literal>
</div>

2. JS 物件/JSON 輸出

<script>
  <literal>
    var config = {$Think.config.CUSTOM.{$key}};
    var data = {"user": "{$user.name}", "roles": [{$roles}]};
  </literal>
</script>

3. PHP 區塊內輸出模板語法

<php><literal>echo '{$Think.config.CUSTOM.' . $key . '}';</literal></php>

進階技巧

  • 整段 JS 檔案:<literal><script src="app.js"></script></literal> 確保內部不被掃描。
  • 巢狀標籤:literal 內不可再包含 literal,若需輸出 </literal> 字串請拆分字串連接。
  • 效能:literal 區塊會跳過編譯,大幅減少模板解析時間,適合大段靜態 JS/CSS。

替代方案對比

方法適用場景缺點
<literal>區塊級原樣輸出需手動包裹
{$var|raw} (TP 5+)單一變數不轉義僅限變數輸出
修改模板引擎分隔符專案級避開衝突遷移成本高
前端模板獨立 .html + AJAX徹底分離架構調整大

結語

<literal> 是 ThinkPHP 模板引擎提供的「逃生艙」,善用它能完美共存前端模板語法、原始 JS 物件與 PHP 動態輸出,避免無謂的語法衝突與安全風險。

  1. 上一篇文章:
  2. 下一篇文章:
Copyright © 程式碼之家 All Rights Reserved