我有这两个字符串:
$str1 = 'Ö';
$str2 = 'Ö';
$e1 = mb_detect_encoding($str1);
$e2 = mb_detect_encoding($str2);
var_dump($str1);
var_dump($str2);
echo 'e1: '.$e1.', e2: '.$e2;
结果是:
string(3) "Ö"
string(2) "Ö"
e1: UTF-8, e2: UTF-8
看来它们不仅是德文字符,而且每个字符都不相同,因此将它们转换为 ASCII 以这种方式
PHP: Replace umlauts with closest 7-bit ASCII equivalent in an UTF-8 string
不会产生相同的结果。有没有办法将这两个字符串转换为这些 ASCII 形式之一 BNOE
或 BNO
?
我知道也许我可以从两者复制 Ö 并将其包含在 strtr
搜索和替换数组中,但我不知道如何重现所有以与第一个 Ö 相同的方式编码的字符。
最佳答案
这是在 Unicode 中表达同一个字母的两种不同形式;一个是 O 与组合 diereses 的组合,另一个是字母 Ö。 Unicode allows either variant to express "Ö".
要将其规范化为您首选的变体,请使用 Normalizer::normalize
:
$str = Normalizer::normalize('Ö', Normalizer::FORM_C);
您可能需要形式 C,它将收敛于“Ö”(单字母形式)。如果您更喜欢“O”+ 组合二重音,请改用表格 D。
关于php - 将 2 个不同种类的相似德语字符转换为 PHP 中的相同 ASCII 字符串,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/37021985/