Frage

Guten Abend Leute.

Dies ist mein Code:

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. Dies ist das Bit das nicht funktioniert

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

Und das ist das Bit, das tut:

case 98: //b
return 'a';

Dies sind nur für Zwecke zu testen.

Kann mir jemand sagen, was passiert ist? Ich hatte die gleiche Art von Fehlern vor, aber jetzt benutze ich keine erweiterten ASCII im Code selbst, die vor der Fehlerursache war.

Ich denke, es muss etwas mit Zeichencodierung zu tun hat, aber ich bin nicht sicher. By the way, ich bin Codierung in Eclipse und nach ihm, die Zeichenkodierung Ich verwende ist Cp1252.

Oh, und ja, wird der Code soll keine Umlaute wie á beseitigen à und ersetzen sie durch ihren Grund vogals, das heißt á-> a

Vielen Dank im Voraus

War es hilfreich?

Lösung

Könnte es sein, dass, wenn Sie Multi-Byte-Zeichen haben, und Sie werden Schleifen jedes Zeichen mit strlen() zu überprüfen, ob Sie durchgeschleift haben? strlen() geht davon aus 1 Byte == 1 Zeichen.

Ich würde schauen Sie in bestehenden Umschrift Bibliotheken für PHP.

Andere Tipps

Vielleicht hilft diese Funktion Ihnen in Kombination mit mb_strlen:

mb_strcut oder mb_substr

EDIT: Sie können beispielsweise so gehen könnte:

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

Dies würde echo Sie alle einzelnen Zeichen aus.

Lizenziert unter: CC-BY-SA mit Zuschreibung
Nicht verbunden mit StackOverflow
scroll top