2010-09-16 23 views
1

Bons gens du soir.Aide avec l'ASCII/encodage étendu en PHP!

Ceci est mon 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. Ceci est le bit qui ne fonctionne pas

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

Et c'est le bit qui fait:

case 98: //b 
return 'a'; 

Ce ne sont que des fins de test.

Quelqu'un pourrait-il me dire ce qui se passe? J'avais le même type d'erreur auparavant mais maintenant je n'utilise pas d'ASCII étendu dans le code lui-même, ce qui était la cause d'erreur avant. Je pense qu'il doit avoir quelque chose à voir avec l'encodage de caractères, mais je ne suis pas sûr. En passant, je code dans Eclipse et, d'après cela, l'encodage de caractères que j'utilise est Cp1252.

Oh, et oui, le code est censé éliminer les lettres accentuées telles que à å et les remplacer par leurs vogals de base, à savoir â-> un

Merci à l'avance

Répondre

2

pourrait-il que si vous avez des caractères multi-octets, et que vous parcourez chaque caractère en utilisant strlen() pour vérifier si vous avez bouclé? strlen() suppose 1 octet == 1 caractère. Je chercherais existing transliteration libraries pour PHP.

+0

Cela a du sens. Y a-t-il une autre façon de faire du vélo à travers une corde qui ne se laisse pas duper par cela? –

+0

@Felipe Regardez 'mb_strlen()'. Cependant, je pense toujours que vous devriez regarder les solutions existantes. Si vous êtes vraiment désireux de rouler les vôtres, jetez un coup d'œil sur celui que vous connaissez déjà et disséquez-le. S'amuser! – alex

+0

* @ Alex: * Votre lien pour rechercher Google ne fonctionne pas. Devrait être: http://www.google.com/search?q=php+transliteration – MikeSchinkel

1

Peut-être que cette fonction vous aide en combinaison avec mb_strlen:

mb_strcut ou mb_substr

EDIT: Par exemple, vous pouvez aller comme ceci:

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

Cela vous écho toutes les des caractères uniques.