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

如何在CSS或PHP中实现全大写单词的正确首字母大写效果

解决方案

text-transform: capitalize和PHP原生ucwords()的默认逻辑都是仅将单词首字母转为大写,不会修改其余字符的大小写,所以遇到全大写的原标题就会失效。你可以通过先统一转小写再处理首字母大写的逻辑解决这个问题,分为后端和前端两种实现方案:


方案1:PHP后端处理(推荐,兼容性、复用性更好)

1.1 模板直接处理

如果只是单处使用,直接修改模板输出逻辑即可:

<h4>
    <a href="{{ route('posts.show', $post )}}">{{ ucwords(strtolower($post->title)) }}</a>
</h4>

如果需要支持多语言、带撇号/连字符的特殊场景(比如o'connor转为O'Connor),可以改用对多字节支持更好的mb_convert_case:

<h4>
    <a href="{{ route('posts.show', $post )}}">{{ mb_convert_case(mb_strtolower($post->title), MB_CASE_TITLE, "UTF-8") }}</a>
</h4>

1.2 模型加访问器(复用性更高)

如果多处需要用到格式化后的标题,直接在Post模型中定义访问器,后续统一调用即可:

// app/Models/Post.php
public function getFormattedTitleAttribute()
{
    return mb_convert_case(mb_strtolower($this->attributes['title']), MB_CASE_TITLE, "UTF-8");
}

模板直接调用格式化后的属性:

<h4>
    <a href="{{ route('posts.show', $post )}}">{{ $post->formatted_title }}</a>
</h4>

方案2:CSS前端处理

如果不想修改后端代码,通过两层text-transform规则也可以实现:

<h4 style="text-transform: lowercase;">
    <a href="{{ route('posts.show', $post )}}" style="text-transform: capitalize;">{{ $post->title }}</a>
</h4>

或者合并为一行简写:

<h4 style="text-transform: lowercase capitalize;">
    <a href="{{ route('posts.show', $post )}}">{{ $post->title }}</a>
</h4>

该方案缺点是对特殊字符分隔的单词处理精度不如PHP,且用户禁用CSS时格式会失效。


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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.10.04 04:57:00