Domanda

gente buona serata.

Questo è il mio codice:

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. Questo è il bit che non funziona

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

E questo è il bit che fa:

case 98: //b
return 'a';

Questi sono solo a scopo di test.

Qualcuno potrebbe dirmi che cosa sta succedendo? Ho avuto lo stesso tipo di errore prima, ma ora non sto usando qualsiasi ASCII esteso nel codice stesso, che è stato la causa dell'errore prima.

Sto pensando che deve avere qualcosa a che fare con la codifica dei caratteri, ma non ne sono sicuro. A proposito, sto codifica in Eclipse e, in base ad esso, la codifica dei caratteri che sto utilizzando è Cp1252.

Oh, e sì, si suppone che il codice per eliminare eventuali lettere accentate come ad esempio   e sostituirli con i loro vogals di base, vale a dire A-> a

Grazie in anticipo

È stato utile?

Soluzione

E 'possibile che se si dispone di caratteri multi-byte, e si sono loop attraverso ogni carattere utilizzando strlen() per verificare se si è in loop fino in fondo? strlen() assume 1 byte == 1 carattere.

Mi piacerebbe guardare in esistente librerie di traslitterazione per PHP.

Altri suggerimenti

Forse questa funzione vi aiuta in combinazione con mb_strlen:

mb_strcut o mb_substr

EDIT: Per esempio si potrebbe andare in questo modo:

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

Questo sarebbe eco tutte le singole caratteri fuori.

Autorizzato sotto: CC-BY-SA insieme a attribuzione
Non affiliato a StackOverflow
scroll top