0

弦に問題があります。forループの後、正確なキリル文字の代わりに他の記号を取得します。目標は、キリル文字 ąčęėįšųūž を a1、c2、e1、e2、i1、s2、u1、u2、z2 に変更することです。私はこれを思いついた:

$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;
      }
    }
  }

単純な解決策のように見えますが、エンコーディングを処理できません。エンコーディングは私にとって謎なので、この問題について何か助けていただければ幸いです。

4

1 に答える 1

0

単純に Unicode 文字列を反復処理して、単一の文字が実際に 1 バイトを超える場合、各反復で完全な文字を受け取ることを期待することはできません。

preg_split文字列を有効な Unicode 文字に分割するには、unicode 修飾子と組み合わせて使用​​します。次に、この結果を使用して、元の文字列の文字を置き換えます。

次のようなマルチバイト正規表現関数の 1 つを使用することもできます。mb_ereg_replace

于 2013-11-29T23:59:40.147 に答える