在PHP中如何将小写字母'ß'转换为大写字母'ẞ'
PHP小写字符'ß'转换为大写'ẞ'的实现方案
问题原因
PHP自带的大小写转换函数默认遵循传统德语正字法规则:
- 非多字节函数
strtoupper()不识别德语特殊字符ß,因此转换后保持原字符不变 - 多字节函数
mb_strtoupper()默认会将ß转换为SS,这是传统德语的大写规则,而官方正式纳入标准的大写字符ẞ是2008年才生效的新规范,默认转换规则未适配该需求。
解决方案
方案1:自定义字符映射(兼容性最优)
不需要额外扩展,仅对ß做特殊替换后再执行常规大写转换,适合绝大多数场景:
function custom_strtoupper(string $input, string $encoding = 'UTF-8'): string { // 优先替换特殊字符ß为大写ẞ $input = str_replace('ß', 'ẞ', $input); // 对剩余字符执行标准大写转换 return mb_strtoupper($input, $encoding); } // 测试示例 echo custom_strtoupper('ß'); // 输出 ẞ echo custom_strtoupper('straße'); // 输出 STRAẞE
方案2:使用Intl扩展(国际化场景推荐)
如果项目已经启用Intl扩展(PHP默认集成,绝大多数生产环境已开启),可以直接调用ICU库的德语区域大写转换规则,适配所有德语特殊字符的规范转换:
// 初始化德语区域大写转换器 $transliterator = Transliterator::create('de-DE_upper'); echo $transliterator->transliterate('ß'); // 输出 ẞ
注意事项
- 所有操作需要保证字符串编码为UTF-8,避免出现乱码
- 如果业务场景需要兼容传统德语大写规则(部分正式文档仍要求ß大写为SS),可根据需求选择对应的转换逻辑
内容的提问来源于stack exchange,提问作者Tarik Weiss
相关产品推荐
相关产品推荐

