我有一个带有“Umlaute”(ä、ö、ü、ä、Ö、Ü、ß)的德语句子,想要逐个字母地处理它。假设我想倒着写每个单词。
我有:
"Die Straße enthält viele größere Schlaglöcher"
"eiD eßartS tlähtne eleiv ereßörg rehcölgalhcS"
我尝试将句子分解为由单个单词组成的数组:
$MyText = "Die Straße enthält viele größere Schlaglöcher";
$Words = preg_split(@"/[^\wäöüÄÖÜß]/", $MyText);
但是当我尝试迭代 $Words 数组时,我遇到了一个问题,因为它包含由 2 个字节(UTF8)表示的字母(“ä”,“ö”,“ü”,...)并写入它们向后不起作用!
一种解决方案如下:
这里有一个代码片段,说明如何做到这一点。
$Word = "enthält";
$Word_Unicode = mb_convert_encoding($Word, 'UTF-16LE', 'UTF-8');
$Letters = str_split($Word_Unicode, 2);
... Do something with the Array $Letters ...
$NewWord_Unicode = implode("", $Letters);
$NewWord = mb_convert_encoding($Word_Unicode, 'UTF-8', 'UTF-16LE');
您可以在 preg_split 中使用
u
修饰符(不贪婪):
<?php
$MyText = "Die Straße enthält viele größere Schlaglöcher";
$Words = preg_split("/[^\wäöüÄÖÜß]/u", $MyText);
$reversed = array_map('strrev', $Words);
echo implode(' ', $reversed);
https://www.php.net/manual/en/reference.pcre.pattern.modifiers.php