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> 將作為純文字輸出,不被解析。
<div id="app">
<literal>
{{ message }} @{{ vueVar }} {{ angularExpr }}
</literal>
</div>
<script>
<literal>
var config = {$Think.config.CUSTOM.{$key}};
var data = {"user": "{$user.name}", "roles": [{$roles}]};
</literal>
</script>
<php><literal>echo '{$Think.config.CUSTOM.' . $key . '}';</literal></php>
<literal><script src="app.js"></script></literal> 確保內部不被掃描。literal 內不可再包含 literal,若需輸出 </literal> 字串請拆分字串連接。literal 區塊會跳過編譯,大幅減少模板解析時間,適合大段靜態 JS/CSS。| 方法 | 適用場景 | 缺點 |
|---|---|---|
<literal> | 區塊級原樣輸出 | 需手動包裹 |
{$var|raw} (TP 5+) | 單一變數不轉義 | 僅限變數輸出 |
| 修改模板引擎分隔符 | 專案級避開衝突 | 遷移成本高 |
| 前端模板獨立 .html + AJAX | 徹底分離 | 架構調整大 |
<literal> 是 ThinkPHP 模板引擎提供的「逃生艙」,善用它能完美共存前端模板語法、原始 JS 物件與 PHP 動態輸出,避免無謂的語法衝突與安全風險。