質問

こんばんは。

これは私のコードです:

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です。

ああ、そしてはい、コードはáàなどのアクセントされた文字を排除し、それらを基本的なヴォーガルに置き換えることになっています。

前もって感謝します

役に立ちましたか?

解決

マルチバイト文字があり、それぞれの文字を使用してループしている場合は、 strlen() ループしているかどうかを確認するには? strlen() 1 byte == 1文字を想定します。

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

他のヒント

たぶん、この関数はMB_STRLENと組み合わせてあなたを助けます:

MB_STRCUTまたMB_SUBSTR

編集:たとえば、次のように移動できます。

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

これは、すべてのシングルチャーアウトをエコーするでしょう。

ライセンス: CC-BY-SA帰属
所属していません StackOverflow
scroll top