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

strtolower和mb_strtolower失效:Contao插入标签转小写失败求助

问题根源与解决方案

嘿,这个问题我太熟了!你踩了Contao插入标签解析时机的坑啦~

为什么你的代码没生效?

Contao的插入标签(比如{{page::title}})不是在PHP代码执行阶段直接解析的,而是要等到模板文件处理的最后一步,才会被系统替换成实际的内容。

你现在的代码逻辑是这样的:

$category = "{{page::title}}"; // 这里存的是字符串"{{page::title}}",不是"Fitness"
echo strtolower($category); // 转小写后还是"{{page::title}}"

等你的PHP代码执行完,模板渲染的时候,系统才把{{page::title}}替换成了"Fitness"——这时候你的strtolower早就执行完了,根本没作用到最终的标题上,所以你看到的还是首字母大写的结果。

正确的处理方式

根据你的使用场景,有两种靠谱的解决办法:

1. 在模板文件里直接用插入标签过滤器

如果你只是想在模板里输出转小写的页面标题,Contao自带了标签过滤器,直接在插入标签后面加|strtolower就行,一步到位:

{{page::title|strtolower}}

这个过滤器会在系统解析插入标签的时候,直接把标题转成小写,完全不用写额外的PHP代码。

2. 通过Contao API直接获取页面标题(适合自定义代码/模块)

如果需要把标题存到PHP变量里做更多处理,别用插入标签,直接通过Contao的模型或全局对象拿数据:

// 方式一:用全局的当前页面对象(前端上下文可用)
$category = strtolower($GLOBALS['objPage']->title);
echo $category;

// 方式二:通过PageModel查询(更通用,比如后台或自定义模块)
$pageId = \Contao\Frontend::getPageId();
$page = \Contao\PageModel::findById($pageId);
if ($page) {
    $category = strtolower($page->title);
    echo $category;
}

这样你拿到的就是已经解析好的页面标题字符串,再调用strtolower或者mb_strtolower(处理特殊字符的话用这个)就会生效了。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.21 03:49:35