Fonction pour "désaccentuer" ?

Répondre


Cette question est un moyen d’empêcher des soumissions automatisées de formulaires par des robots.
Smileys
:D :) :( :o :shock: :? 8-) :lol: :x :P :oops: :cry: :evil: :twisted: :roll: :wink: :!: :?: :idea: :arrow: :| :mrgreen: =D> #-o =P~ :^o :non: :priere: 8-|
Voir plus de smileys
  Revue du sujet
 

  Étendre la vue Revue du sujet : Fonction pour "désaccentuer" ?

par Ryle » 16 juil. 2009, 11:29

Modération :
Zax, si ta question est résolue, pense à ajouter le tag [Résolu]
pour indiquer aux personnes qui voudront consulter ce sujet qu'il contient une solution.
Tu peux réaliser cette opération en cliquant sur le bouton Image en haut à gauche de ce sujet.

par Zax » 16 juil. 2009, 08:29

Merci pour vos réponses.

par orgerix » 13 juil. 2009, 11:49

Pour voir si une chaine est encrypté sous une certaine forme, tu peux utiliser en cascade la fonction de décryptage et d'encryptage que tu compare à la chaine d'origine. Si la chaine d'origine est bien encrypté sous cette forme, il y aura égalité et inégalité dans les autres cas.

par Victor BRITO » 13 juil. 2009, 11:17

Il y a aussi la fonction iconv(), dont le deuxième argument permet d'ajouter au codage de sortie la chaîne //TRANSLIT, ainsi que la chaîne //IGNORE pour éviter que la conversion ne s'arrête prématurément en cas de problème de conversion d'un caractère spécial. ;)

par Zax » 13 juil. 2009, 11:01

Je crois avoir testé une fonction comme "suppr_accent" mais elle ne fonctionne pas dans un de mes 2 cas (source SQL ou source PHP, me souviens plus).

En y repensant, mon problème peut aussi se poser de la manière suivante : est-il possible de connaitre en PHP et au moment de traiter une chaine l'encodage de celle-ci ?

par @rthur » 13 juil. 2009, 10:44

Bonjour,

Moi j'utilise un truc du genre ci-dessous et ça marche plutôt bien à condition de faire un html_entity_decode() avant, pour éviter les caractères encodés HTML.
function suppr_accent($texte) {
     $accent='ÀÁÂÃÄÅàáâãäåÒÓÔÕÖØòóôõöøÈÉÊËéèêëÇçÌÍÎÏìíîïÙÚÛÜùúûüÿÑñ';
     $noaccent='AAAAAAaaaaaaOOOOOOooooooEEEEeeeeCcIIIIiiiiUUUUuuuuyNn'; 
     $texte = strtr($texte,$accent,$noaccent); 
     return $texte;
}
Sinon regarde dans les commentaire de la fonction strtr(), il y a un paquet d'exemples de fonctions pour retirer les accents :)

##edit : Si vous travaillez en UTF8, et que le code ci-dessus ne fonctionne pas, essayez celui-ci :
function suppr_accent($texte) {
    $accent='ÀÁÂÃÄÅàáâãäåÒÓÔÕÖØòóôõöøÈÉÊËéèêëÇçÌÍÎÏìíîïÙÚÛÜùúûüÿÑñ';
    $noaccent='AAAAAAaaaaaaOOOOOOooooooEEEEeeeeCcIIIIiiiiUUUUuuuuyNn';
    $texte = strtr($texte,utf8_decode($accent),$noaccent);
    return $texte;
}

Fonction pour "désaccentuer" ?

par Zax » 13 juil. 2009, 10:14

Bonjour,

Je me trouve confronté à des problèmes de caractères accentués à 2 niveaux :
1 - retour SQL -> PHP5 -> AJAX -> alert JS
2 - tri alpha d'un array en PHP 5 : "énergumène" se retrouve après "zoulou" :(

J'ai donc essayé d'écrire une fonction PHP qui transforme les caractères accentués les plus courants en caractères non accentués en prenant des bouts de ci de là. Cette fonction doit "marcher" quel que soit la chaine passée : dans mon cas, ISO venant d'une base SQL, ou UTF-8 venant d'une variable PHP. Je sais que c'est le bazar mais je ne peux pas normaliser le format reçu.

Ca donne :
function sansAccent($chaine) {
	// renvoit la chaine passee sans accent
	$accents = '/&([A-Za-z]{1,2})(grave|acute|circ|cedil|uml|lig);/';
	if (strlen(htmlentities($chaine,ENT_COMPAT,'UTF-8')) == 0) {
		// $chaine en ISO-8859-1
		return preg_replace($accents,'$1',htmlentities($chaine));
	}else{
		// $chaine en UTF-8
		return preg_replace($accents,'$1',htmlentities($chaine,ENT_COMPAT,'UTF-8'));
	}
}
J'ai l'impression que c'est du bricolage :(
Vous en pensez quoi ? Quelqu'un connait une fonction plus propre ?

Merci d'avance.