【问题标题】:Getting wrong encoding when trying to replace cyrillic symbols尝试替换西里尔符号时出现错误编码
【发布时间】:2013-11-29 23:49:30
【问题描述】:

我的字符串有问题。在 for 循环之后,我得到了一些其他符号,而不是我精确的西里尔字母。目标是将西里尔字母:ąčęėįšųūž 更改为: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;
      }
    }
  }

这看起来像一个简单的解决方案,但我无法处理编码。编码对我来说是一个谜,所以我非常感谢任何关于这个问题的帮助。

【问题讨论】:

    标签: php string encoding cyrillic


    【解决方案1】:

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

    preg_split 与 unicode 修饰符结合使用,将您的字符串拆分为有效的 unicode 字符。然后用 this 的结果替换原字符串中的字符。

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

    【讨论】:

    • 感谢您的建议,我一定会尝试使用其中一种方法来解决问题:)
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2023-03-03
    • 2016-10-05
    • 2021-12-03
    • 2018-02-19
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多