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

如何逐个字符处理含变音符号的UTF-8德语句子并反转单词?

解决德语含变音符号的单词反转问题

问题根源

PHP默认字符串操作是字节级的,而UTF-8编码的德语变音符号(ä, ö, ü, ß等)占2-3个字节,直接用strrev()反转会拆分多字节字符导致乱码;同时preg_split默认不支持UTF-8字符集,分割单词时也容易出错。

解决方案步骤

1. 正确分割UTF-8格式的单词

给preg_split添加u修饰符(启用UTF-8模式),调整正则表达式确保匹配包含变音符号的单词:

$MyText = "Die Straße enthält viele größere Schlaglöcher";
// 匹配Unicode字母+ß,分割非此类字符,过滤空元素
$Words = preg_split('/[^\p{L}ß]/u', $MyText, -1, PREG_SPLIT_NO_EMPTY);

这里\p{L}匹配任意Unicode字母,u修饰符让正则支持UTF-8,PREG_SPLIT_NO_EMPTY避免分割出空数组元素。

2. 安全反转每个UTF-8单词

不能用strrev(),改用多字节字符串处理函数逐字符拆分后反转:

$reversedWords = [];
foreach ($Words as $word) {
    // 按UTF-8字符拆分字符串为数组
    $chars = mb_str_split($word, 1, 'UTF-8');
    // 反转数组并拼接成字符串
    $reversedWords[] = implode('', array_reverse($chars));
}
// 拼接反转后的单词得到最终句子
$result = implode(' ', $reversedWords);
echo $result; // 输出:eiD eßartS tlähtne eleiv ereßörg rehcölgalhcS

完整代码示例

$MyText = "Die Straße enthält viele größere Schlaglöcher";
$Words = preg_split('/[^\p{L}ß]/u', $MyText, -1, PREG_SPLIT_NO_EMPTY);

$reversedWords = [];
foreach ($Words as $word) {
    $chars = mb_str_split($word, 1, 'UTF-8');
    $reversedWords[] = implode('', array_reverse($chars));
}

$result = implode(' ', $reversedWords);
echo $result;

关键知识点

  • u修饰符:让PCRE正则支持UTF-8编码的字符匹配
  • mb_str_split():按UTF-8字符拆分字符串,而非字节
  • \p{L}:Unicode属性匹配,覆盖所有语言的字母字符,比手动枚举变音符号更通用

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.11 15:06:10