如何使 Text::slug() 正确转换德语变音符号?

use*_*112 1 cakephp diacritics slug cakephp-3.x

我正在使用 CakePHP 3.6,当我使用带有德语变音符号的单词时,例如:

\n\n
Text::slug('Grundst\xc3\xbccke')\n
Run Code Online (Sandbox Code Playgroud)\n\n

我会得到:

\n\n
\n

Grundstucke(其中 \xc3\xbc = u)

\n
\n\n

但这是不正确的,我应该得到:

\n\n
\n

Grundstuecke(其中 \xc3\xbc = ue)

\n
\n\n

是否有一个选项可以设置,以便元音变音按照我想要的方式进行转换?

\n

Ili*_*dia 5

更改您的音译器

Text::slug()内部使用(transliterator_transliterate参见php doc)。

因此,您需要更改正在使用的默认音译器。

经过一番研究后,我找到了一个适合您的方法。

在 bootstrap.php 文件末尾添加:

\Cake\Utility\Text::setTransliteratorId( 'de-ASCII; Any-Latin; Latin-ASCII; [\u0080-\u7fff] remove ');
Run Code Online (Sandbox Code Playgroud)

然后您的文本将按照您的预期进行转换。

笔记

我用来找到这个答案的资源:

  • 我想对此点赞一千次!我什至不使用 cakephp,但尝试使用标准 PHP 正确音译德语变音符号。尽管按照到处推荐的方式设置了 setlocale(LC_ALL, "de_DE.utf-8")`(是的,该区域设置在系统上可用),但带有 `ASCII//TRANSLIT` 的 `iconv()` 不起作用。我一直在寻找几个小时(字面意思!)直到我找到这个。 (2认同)