尝试替换循环符号时出现错误编码


Getting wrong encoding when trying to replace cyrillic symbols

我的字符串有问题。在for循环之后,我得到了一些其他符号,而不是我的确切西里尔字母。我们的目标是将西里尔字母:browčÉįšõúž改为:a1、c2、e1、e2、i1、s2、u1、u2、z2。我想出了tihs:

$ltSymbolsArray = array(
      'a1' => 'ą',
      'c2' => 'č',
      'e1' => 'ę',
      'e2' => 'ė',
      'i1' => 'į',
      's2' => 'š',
      'u1' => 'ų',
      'u2' => 'ū',
      'z2' => 'ž'
  );
  $string = 'ąsąžadcę';
  for ($i = 0; $i < strlen($string); $i++) {
    foreach ($ltSymbolsArray as $key => $value) {
      if ($string[$i] == $value) {
        $string[$i] = $key;
      }
    }
  }

这看起来是一个简单的解决方案,但我无法处理编码。编码对我来说是个谜,所以我真的很感激在这个问题上能得到任何帮助。

如果一个字符真的超过了一个字节,那么你不能简单地对unicode字符串进行迭代,并期望每次迭代都会收到一个完整的字符。

preg_split与unicode修饰符结合使用,可以将字符串拆分为有效的unicode字符。然后使用此操作的结果来替换原始字符串中的字符。

您还可以使用一个多字节正则表达式函数,如mb_ereg_replace