我很难从某些$string
中删除变音符号。我的代码是
<?php
$string = "Příliš žluťoučký kůň úpěl ďábelské ódy.";
$without_diacritics = strTr($string, "říšžťčýůúěďó", "risztcyuuedo");
echo $without_diacritics;
预期输出为Prilis zlutoucky kun upel dabelske ody.
Puiszliuc uuluueoudoks� ku�u� s�pd�l d�scbelsks� s�dy.
我认为这可能是多字节字符的问题,但我发现strtr
是多字节安全的。我的假设错了吗?我错过了什么?
答案 0 :(得分:4)
问题是您的输入翻译字符串是输出翻译字符串的两倍(因为Unicode),strtr()
使用字节而不是字符;在这种情况下,翻译数组会更好:
$string = "Příliš žluťoučký kůň úpěl ďábelské ódy.";
echo strtr($string, [
'ř' => 'r',
'í' => 'i',
'š' => 's',
'ž' => 'z',
'ť' => 't',
'č' => 'c',
'ý' => 'y',
'ů' => 'u',
'ú' => 'u',
'ě' => 'e',
'ď' => 'd',
'ó' => 'o'
]);
输出:
Prilis zlutoucky kuň upel dábelské ody.
答案 1 :(得分:1)
一个简单且经过尝试的解决方案(基于this answer),利用iconv()
将字符串“从您给定的编码转换为ASCII字符”。
$input = 'Příliš žluťoučký kůň úpěl ďábelské ódy.';
$input = iconv('UTF-8', 'ASCII//TRANSLIT', $input);
echo $input;
解释
您面临的问题是由于字符串/文档的编码。 strtr()
的问题在于它不是多字节意识的,正如@ChrisForrence在comment中所述。
可能是因为其中一些字符不止一个字节,所以 它没有正确映射。