我很难从一些$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是多字节安全的。我的假设错了吗?我错过了什么?

最佳答案

问题是,您的输入转换字符串是输出转换字符串的两倍大(因为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.

Demo

10-06 07:57