begin process at 2012 02 13 08:24:20
  Trouver un code source :
 
dans
 
Accueil > 

Code

 > 

Chaîne de caratère

 > FONCTION DE CONVERSION D'UNE CHAINE DE CARACTÈRE VERS UN TYPAGE UNIX

FONCTION DE CONVERSION D'UNE CHAINE DE CARACTÈRE VERS UN TYPAGE UNIX


 Information sur la source

Note :
Aucune note
Catégorie :Chaîne de caratère Classé sous :unix, chaine, caractere, convertion, preg Niveau :Débutant Date de création :23/01/2007 Date de mise à jour :22/05/2008 22:59:57 Vu :12 395

Auteur : codefalse

Ecrire un message privé
Site perso
Commentaire sur cette source (11)
Ajouter un commentaire et/ou une note

 Description

Bonjour,
Alors cette fonction permet de convertir n'importe quelle chaine de caractère en une équivalence alphanumérique sans accents, espaces et autres particularités.
Le but est simple, c'est pour l'utiliser (dans mon cas) pour l'url rewriting, car les accents et les espaces ca fait bugger le systeme (même la fonction urlencode apparement)

Si je la poste ici, c'est aussi afin de trouver éventuellement une meilleure solution de conversion, car je n'ai pas réussi à mettre la main sur une méthode plus simple et (voire) plus rapide.
Je vous laisse donc découvrir le tout et attends vos commentaires pour l'évolution de cette fonction.

Source

  • function toUnix ($sChaine) {
  • $sSearch = array ('/à|á|â|ä|ã|å/', '/À|Á|Â|Ä|Ã|Å/', '/è|é|ê|ë/', '/È|É|Ê|Ë/', '/ì|í|î|ï/', '/Ì|Í|Î|Ï/', '/ò|ó|ô|ö|ø/', '/Ò|Ó|Ô|Ö|Ø/', '/ù|ú|û|ü/', '/Ù|Ú|Û|Ü/', '/ÿ/', '/¾/', '/ñ/', '/Ñ/', '/ç/', '/Ç/', '/[^a-z0-9]/i');
  • $sReplace = array ('a', 'A', 'e', 'E', 'i', 'I', 'o', 'O', 'u', 'U', 'y', 'Y', 'n', 'N', 'c', 'C', '_');
  • return preg_replace ($sSearch, $sReplace, $sChaine);
  • }
function toUnix ($sChaine) {
	$sSearch = array ('/à|á|â|ä|ã|å/', '/À|Á|Â|Ä|Ã|Å/', '/è|é|ê|ë/', '/È|É|Ê|Ë/', '/ì|í|î|ï/', '/Ì|Í|Î|Ï/', '/ò|ó|ô|ö|ø/', '/Ò|Ó|Ô|Ö|Ø/', '/ù|ú|û|ü/', '/Ù|Ú|Û|Ü/', '/ÿ/', '/¾/', '/ñ/', '/Ñ/', '/ç/', '/Ç/', '/[^a-z0-9]/i');
	$sReplace = array ('a', 'A', 'e', 'E', 'i', 'I', 'o', 'O', 'u', 'U', 'y', 'Y', 'n', 'N', 'c', 'C', '_');
	
	return preg_replace ($sSearch, $sReplace, $sChaine);
}

 Conclusion

L'usage de la méthode strtr pose problème si l'encodage du fichier est en utf-8. (un accent est codé sur plusieurs bit, et pas un charactère, du coup strtr retourne n'importe quoi !)

Cette méthode semble être fonctionnelle dans n'importe quel cas ! :)


 Historique

22 mai 2008 22:59:57 :
Simplification du code

 Sources du même auteur

[PHP5] MULTI-THREADING : ACCÉLÉRATION DU TEMPS DE TRAVAIL D'...
Source avec Zip GESTIONNAIRE DE MODÈLES SQL
Source avec Zip [PHP5] - SIMPLE CLASSE D'ENVOI D'EMAIL
Source avec Zip CATAPULT FRAMEWORK, VERSION 0.1 : "ORIGIN"
[PHP5] - CLASSE D'UPLOAD

 Sources de la même categorie

ADRESSE ABSOLUE DE LA PAGE EN COURS, AVEC VARIABLES $_GET par Dariumis
Source avec Zip CLASSE D'OBJET DE RECHERCHE DE MOTS DANS DES TABLEAUX ET/OU ... par 8Tnerolf8
RÉCUPÉRER LES MINIATURES D'UNE VIDÉO YOUTUBE par tefa24600
Source avec Zip Source avec une capture CONVERTISSEUR DE NOMBRES EN TEXTE par macruz
Source avec Zip Source avec une capture CODAGE TEXTE >HTML, ISO, SPECIALCHARS, URL ET DECODAGE par Salva9473

 Sources en rapport avec celle ci

Source avec Zip CONVERTISSEUR LAMBERT2 ÉTENDU EN COORDONNÉE GÉOGRAPHIQUE (LO... par varfendell
SÉCURISATION DE FORMULAIRE par ultimacsplayer
CLASSE DE VÉRIFICATION DE DONNÉES par swaenboutu
UNIX TIME CONVERTER (UTC) par tiger222
OPTIMISATION DE CHAINE POUR RÉÉCRITURE D'URL par crocxx2

Commentaires et avis

Commentaire de juki_webmaster le 23/01/2007 14:17:03

Bonne idée d'utiliser #, la methode que j'ai trouvé est de faire un htmlentities(..,.., 'utf-8'), de faire une array('À' => 'a' ...), suivit d'une grose boucle foreach() et de str_replace(), pour terminer avec un html_encode(.., .., 'utf-8').
Car le truc "dangeureux" c'est d'encoder mal son script php (ça peut arriver par inavertance) et de ce retrouvé avec quelque chose de pas encodé ou pire de mal encodé.
C'est pourqoui je n'aime pas du tout laisser des choses non ASCII hors des commentaires.
Si ya mieu je prend :)

Commentaire de codefalse le 23/01/2007 14:19:58 administrateur CS

merci de ton commentaire mais j'ai pas tout compris :
"si ya mieu je prend", la mienne est mieux ou pas d'apres toi ? si elle est pas mieux, met la tienne, justement, le but ici (pour moi) et de trouver la meilleur fonction pour ce type d'usage :)
mais apparement d'apres ce que tu en dit, la mienne serait plus rapide, car elle utilise que les expressions régulieres, que toi ca utilise deux fois la fonctions htmlentities, une boucle foreach et un str_replace, ca parait plus lourd :)

Commentaire de garfield90 le 24/01/2007 14:21:23

Tu pourrais déjà regrouper les caractères par groupe tes à,ä,à ensemble idem pour le é,è,...

Tu aurais un tableau beaucoup plus lisible.
$search  = array('#à|ä|â#',...,'# |"|\'#');
$replace = array('a',...,'-');

Je trouverai ca plus simple mais bon après c'est une histoire de bench

Commentaire de kankrelune le 25/01/2007 13:49:06

comme garfield90... le tout dans un str_replace() (sauf pour la dernière expression)

@ tchaOo°

Commentaire de codefalse le 17/05/2007 15:45:19 administrateur CS

Kankrelune : le soucis avec str_replace, c'est le fait qu'elle est sensible à la casse, et str_ireplace n'est que depuis php5 ? La meilleur solution reste encore preg_replace (sauf si tu a une proposition plus interessante ! je suis vraiment interessé d'optimiser cette fonction !)

Commentaire de kankrelune le 17/05/2007 21:02:41

Oui dans ce cas là preg_replace reste la solution la moins prise de tête... .. . ;o)

@ tchaOo°

Commentaire de guewini le 01/06/2007 09:55:45

Moi je fais comme ca (ce qui reviens au même mais ca prend une ligne) :
$chaine = strtr($chaine, "ÀÁÂÃÄÅàáâãäåÒÓÔÕÖØòóôõöøÈÉÊËèéêëÇçÌÍÎÏìíîïÙÚÛÜùúûüÿÑñ -'", "AAAAAAaaaaaaOOOOOOooooooEEEEeeeeCcIIIIiiiiUUUUuuuuyNn___");
inconvénient : c'est caractères par caractère donc le '&' n'est pas remplacable par '_and_'

Commentaire de codefalse le 01/06/2007 10:38:56 administrateur CS

par contre je crois que strtr est plus rapide :)
Oué ! pas mal !, surtout que tu en remplace plus que moi (par les bonnes correspondances) apparement là :)

Commentaire de codefalse le 22/05/2008 23:01:28 administrateur CS

Une petite simplification du code ? d?t s'imposer.
@Guewini strtr pose probleme si l'encodage du fichier est en utf-8 (en tout cas pour moi ! :/)
C'est pour cela que j'ai gard? ma m?thode originelle, mais optimis?e maintenant ! (:

Commentaire de guewini le 23/05/2008 16:42:32

Je dois dire que je n'ai pour l'instant jamais eut le problème ... en tout cas rien à redire sur ta solution. Ca a l'air tip top ^^

Commentaire de codefalse le 24/05/2008 11:13:16 administrateur CS

merci :)

 Ajouter un commentaire


Discussions en rapport avec ce code source dans le forum

Probleme a la con(chaine de caractere) [ par webdragon ] Bonsoir,je suis un débuter qui fait son site comment on fait pour extraire le membre d'une chaine de caractereexemple:$hh="Nbvcdddss";et pour faire qu Taille d'une chaine de caractere [ par g0belin ] Comment savoir la Taille d'une chaine de caractere???Je sais que en delphi il faut faire lenght(nom_de_ma_chaine)merci d'avance extraire la partie numerique d'une chaine de caractere !! [ par fredericmaill ] Salut @ tous !!J'aimerais savoir comment extraire la partie numerique d'une chaine de caractere ?Je crois me souvenir qu'une fonction qui  permet preg_replace pour chaine de code php [ par JoJo738 ] Enlever chaine caractere [ par stanilou ] Salut, J'ai un petit soucis, je recupere un texte d'un fichier js en javascript (le fichier js est tout simple) et lorsque je met un echo, ca me donne Prendre tout les caractere apres le @ dans une chaine [ par cyberastuces ] Salut tout le mondealors voila comment prendre tout les caracteres apres le @ dans une chaine, c'est pour garder dans une adresse e-mail tout se qui e Probléme de pattern [ par SA7BOOCH ] Bonjour,J'ai un probléme de pattern, je veux découper une chaine de caractére pour faire une recherche sur chaque partie de cette chain contenue des variables et chaine de caractere [ par cacoucatatonique ] salut à tous, c'est pour savoir s'il existe une commande qui donne le nombre de caractere contenue dans une chaine quelconque , laquelle est bien Traitement chaine de caractere [ par paloxicide ] Bonjour tout le monde,Jai une chaine de caractere qui ressemble a ca"toto<br>titi<br>tutu<br>"et je dois en retirer les <br> p Nombre Octec Chaine Caractere [ par josh666 ] Bonjour a tous !Est-il possible de connaitre la taille (en octec) du contenu d'une variable, sachant que le contenu de la variable est une chaine de c


Nos sponsors


Sondage...

CalendriCode

Février 2012
LMMJVSD
  12345
6789101112
13141516171819
20212223242526
272829    

Consulter la suite du CalendriCode

 
Développement réalisé par Nicolas SOREL (Nix) avec l'aide de : Cyril DURAND et Emmanuel (EBArtSoft), Merci à Vincent pour ses précieux conseils.
CodeS-SourceS.com© Toute reproduction même partielle est interdite sauf accord écrit du Webmaster
CodeS-SourceS.com© est une marque déposée tous droits réservés

Google Coop CodeS-SourceS Google Coop CodeS-SourceS
Temps d'éxécution de la page : 0,749 sec (3)

Nous contacter | Annoncer sur CodeS-SourceS | Mentions légales