PHP中ucwords与strtolower组合失效,姓氏无法转首字母大写求助
问题解决:姓氏首字母未大写的修复方案
你的代码出现姓氏始终小写的问题,大概率是拼接字符串时的空格处理导致ucwords没有正确识别姓氏为独立单词(虽然示例代码逻辑看似没问题,但实际场景中可能存在隐藏的空格或字符干扰)。更可靠的做法是拆分后分别处理每个部分的大小写,再重新拼接:
$subjectnameraw = "SMITH, JOHN LEE"; // 按逗号拆分姓氏和名字 list($lastName, $firstName) = explode(',', $subjectnameraw); // 去除各部分前后多余空格 $lastName = trim($lastName); $firstName = trim($firstName); // 将每个部分转为首字母大写格式 $lastName = ucwords(strtolower($lastName)); $firstName = ucwords(strtolower($firstName)); // 按「名字 姓氏」的顺序拼接 $subjectname = $firstName . ' ' . $lastName; // 输出结果:John Lee Smith echo $subjectname;
为什么原代码可能失效?
原代码依赖ucwords识别空格分隔的单词,但如果拼接后的字符串中姓氏前的空格被意外忽略(比如原数据逗号后无空格、或处理时多/少加了空格),ucwords会把名字末尾和姓氏连在一起视为一个单词,导致姓氏首字母无法大写。拆分后单独处理则完全规避了这个问题。
内容的提问来源于stack exchange,提问作者Cody_T
相关产品推荐
相关产品推荐

