strtr 行为怪异 - 从字符串中删除变音符号
strtr acting weird - removing diacritics from a string
我很难从某些 $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
是多字节安全的。我的假设错了吗?我错过了什么?
一个简单且经过尝试的解决方案(基于 this answer), harnesses iconv()
来转换字符串 "from your given encoding to ASCII characters"。
$input = 'Příliš žluťoučký kůň úpěl ďábelské ódy.';
$input = iconv('UTF-8', 'ASCII//TRANSLIT', $input);
echo $input;
说明
您遇到的问题是由 string/document 的编码引起的。 strtr()
的问题在于它不支持多字节,正如@ChrisForrence 在他的 .
中所述
It may be because some of those characters are more than one byte, so
it doesn't map properly.
问题是您的输入翻译字符串是输出翻译字符串的两倍(因为 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.
我很难从某些 $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
是多字节安全的。我的假设错了吗?我错过了什么?
一个简单且经过尝试的解决方案(基于 this answer), harnesses iconv()
来转换字符串 "from your given encoding to ASCII characters"。
$input = 'Příliš žluťoučký kůň úpěl ďábelské ódy.';
$input = iconv('UTF-8', 'ASCII//TRANSLIT', $input);
echo $input;
说明
您遇到的问题是由 string/document 的编码引起的。 strtr()
的问题在于它不支持多字节,正如@ChrisForrence 在他的
It may be because some of those characters are more than one byte, so it doesn't map properly.
问题是您的输入翻译字符串是输出翻译字符串的两倍(因为 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.