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

PHP中如何识别UTF-8字符串的小写字符?解决ctype_lower失效问题

检测UTF-8字符串中小写字符的PHP替代方法

针对UTF-8字符串里的特殊小写字符(比如德语变音符号ä、ö、ü),ctype_lower()无法识别的问题,你可以用以下两种可靠的替代方案:

方案1:mb_strtolower() 对比法

利用多字节字符串函数mb_strtolower()将字符转为小写,再和原字符对比。如果两者相等,说明原字符是小写(该方法支持所有UTF-8兼容的小写字符)。

方案2:正则表达式匹配

使用支持Unicode的正则表达式,配合u修饰符开启UTF-8模式,匹配Unicode小写字母范畴(\p{Ll})。

修改后的small_caps函数示例

这里用mb_strtolower()方案优化你的原函数,同时简化代码逻辑:

function small_caps($string)
{
    $buf = "";
    $chars = mb_str_split($string);
    
    foreach ($chars as $char) {
        // 用mb_strtolower判断是否为小写字符
        if ($char === mb_strtolower($char, 'UTF-8')) {
            $buf .= "<small>$char</small>";
        } else {
            $buf .= "<b>$char</b>";
        }
    }

    // 合并连续的<small>标签
    $buf = preg_replace('/(<\/small>)(<small>)/', '', $buf);

    return "<span style='text-transform:uppercase'>$buf</span>";
}

如果想用正则方案,只需把判断条件替换为:

if (preg_match('/^\p{Ll}$/u', $char)) {

注意事项

  • 确保PHP的多字节字符串扩展(mbstring)已启用,这是处理UTF-8字符串的基础。
  • 所有字符串操作都要使用mb_开头的多字节函数,避免出现乱码或字符截断问题。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.06 17:17:38