You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

TYPO3 Fluid模板非HTML格式下如何避免变量被htmlspecialchars转义

原因说明

你设置setFormat仅会影响Fluid的模板自动查找规则,不会关联切换转义策略,Fluid默认全局开启HTML实体转义,所以即使是txt格式也会默认转义特殊字符。

可用解决方法

  • 方法1:PHP端全局关闭当前视图转义(推荐,无需修改模板)
    在调用render()之前添加一行代码即可全局关闭该视图所有输出的HTML转义:
$view->getRenderingContext()->setEscapingEnabled(false);

修改后的完整代码如下:

$view = GeneralUtility::makeInstance(StandaloneView::class);
$view->setFormat('txt');
$view->setTemplatePathAndFilename('EXT:myext/Resources/Private/Templates/test.txt');
$view->assignMultiple([
    'test' => 'test&test',
]);
// 新增行,关闭全局转义
$view->getRenderingContext()->setEscapingEnabled(false);
$content = $view->render();

添加后直接输出{test}就会得到test&test的原始内容。

  • 方法2:模板内声明关闭转义
    如果不想修改PHP代码,只需在txt模板的第一行添加转义关闭声明即可:
{escaping off}
{test}

该声明作用于当前模板全局,所有变量输出都无需再加f:format.raw。

  • 方法3:按格式动态切换转义开关
    如果同一个视图需要兼容多种输出格式,可以根据格式类型动态判断是否关闭转义:
$outputFormat = 'txt';
$view->setFormat($outputFormat);
// 仅HTML格式保留转义,其他格式全部关闭转义
if ($outputFormat !== 'html') {
    $view->getRenderingContext()->setEscapingEnabled(false);
}

内容的提问来源于stack exchange,提问作者Rudy Gnodde

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.10.06 22:39:00