2010-09-16 3 views
0
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){ 

    switch ($in) { 
    case 'Á': 
      return 'A'; 
    case 'á': 
      return 'a'; 
    default: 
     return $in;  
    } 
} 

Ceci est le code. Ne fonctionne pas Des pensées? Oh ouais. Il entre toujours la sortie dafault pour toute entrée. Peut-être que c'est quelque chose à voir avec la façon dont les poignées php chargent les cordes X? Je ne sais pas.Impossible de faire fonctionner les méthodes d'une classe

+0

S'il vous plaît être plus descriptif du contexte environnant. –

+0

Qu'est-ce qui ne fonctionne pas exactement? – halfdan

+0

Qu'est-ce qui ne va pas? – vfn

Répondre

1

Au lieu de changer le caractère lui-même, changez le code de caractère. Il est dangereux d'incorporer des caractères ASCII étendus directement dans une chaîne, brut. Parfois, même l'éditeur que vous utilisez pour écrire le code peut enregistrer les caractères de façon incorrecte, si vous avez un mauvais encodage spécifié.

+0

Hm ... Ouais peut-être, mais ça devrait marcher comme ça, n'est-ce pas? –

+0

Il est toujours un peu dangereux d'incorporer des caractères ASCII Extended dans un code comme ça. –

1

Vous devez utiliser str_replace à la place:

$input = str_replace(array('Á', 'á'), array('A', 'a'), $input); 

qui fait le même travail que votre instruction switch.

+2

Pas vraiment - vous vouliez dire: '$ input = str_replace (array ('Á', 'A'), array ('á', 'a'), $ input);' - et voir les dangers de l'intégration ASCII –

+0

I ' Je vais essayer ça. Merci –

+0

Je suis d'accord avec Peter; Peu importe comment vous faites le remplacement réel. Tant que vous intégrez directement des caractères ASCII étendus, le code peut échouer. –

0

Oui. J'ai légèrement changé le code à ceci

 switch ($in) { 
     case 'B': 
      return 'A'; 
     case 'b': 
      return 'a'; 
     default: 
      return $in;  
    } 

à des fins de test et cela a fonctionné. Merci à tous.

Questions connexes