1

こんばんは。

これは私のコードです:

static private  function removeAccentedLetters($input){
    for ($i = 0; $i < strlen($input); $i++) {
        $input[$i]=self::simplify($input[$i]);
    }
    return $input;
}
static private function simplify($in){
    $ord=ord($in);
    switch ($ord) {
        case 193: //Á...
        return 'A';
        case 98: //b
        return 'a';
        default:
        return $in;
    }
}

Ok。これは機能しないビットです

case 193: //Á...
  return 'A';

そして、これはビットです:

case 98: //b
return 'a';

これらはテスト目的のためだけのものです。

誰が何が起こっているのか教えてもらえますか? 以前も同じ種類のエラーがありましたが、以前はエラーの原因であったコード自体で拡張 ASCII を使用していません。

文字エンコーディングと関係があるに違いないと思っていますが、よくわかりません。ちなみに、私は Eclipse でコーディングしており、それによると、使用している文字エンコーディングは Cp1252 です。

ああ、そうです、コードは á à などのアクセント付きの文字を削除し、それらを基本的な母音に置き換えることになっています。つまり、á->a

前もって感謝します

4

2 に答える 2

2

マルチバイト文字があり、ループしているstrlen()かどうかを確認するために使用して各文字をループしている可能性がありますか? strlen()1 バイト == 1 文字と仮定します。

PHP用の既存の音訳ライブラリを調べます。

于 2010-09-16T07:01:55.633 に答える
1

たぶん、この関数は mb_strlen と組み合わせると役立ちます:

mb_strcut または mb_substr

編集:たとえば、次のようになります。

$string = 'cioèòà';
for ($i=0;$i<mb_strlen($string);$i++) {
  echo mb_substr($string, $i, 1);
}

これにより、すべての単一文字がエコーされます。

于 2010-09-16T07:09:55.943 に答える