Pregunta

gente buena tarde.

Este es mi código:

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. Esta es la parte que no funciona

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

Y esta es la parte que hace:

case 98: //b
return 'a';

Estos son sólo para propósitos de prueba.

Podría alguien decirme qué está pasando? Yo tenía el mismo tipo de error antes, pero ahora no estoy usando cualquier ASCII extendido en el propio código, que fue la causa del error antes.

Estoy pensando que debe tener algo que ver con la codificación de caracteres, pero no estoy seguro. Por cierto, estoy de codificación en Eclipse y, según ella, la codificación de caracteres que estoy usando es Cp1252.

Ah, y sí, el código se supone que debe eliminar cualquier letras acentuadas, tales como una A y reemplazarlos con sus vogals básicos, es decir a-> a

Gracias de antemano

¿Fue útil?

Solución

¿Es posible que si tiene caracteres de múltiples bytes, y se recorre cada personaje usando strlen() para comprobar si se ha enrollado a través? strlen() asume 1 byte == 1 carácter.

Me vería en existente bibliotecas de transliteración para PHP.

Otros consejos

Tal vez esta función le ayuda en combinación con mb_strlen:

mb_strcut o mb_substr

EDIT: Por ejemplo, usted podría ir como esto:

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

Esto le repetir todos los caracteres individuales a cabo.

Licenciado bajo: CC-BY-SA con atribución
No afiliado a StackOverflow
scroll top