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
相关产品推荐
相关产品推荐

