Comment enlever/trouver tous les caractères "spéciaux&q

thierry8
WRInaute accro
WRInaute accro
 
Messages: 3251
Inscription: 11 Juil 2005

Comment enlever/trouver tous les caractères "spéciaux&q

Message le Mer Mar 08, 2006 11:33

Bonjour,

Comment est-il possible de modifier tous les caractères spéciaux d'une chaine (ex: é, à, ù, etc...) par leur équivalent non accentué ?

En php.


chantra
WRInaute occasionnel
WRInaute occasionnel
 
Messages: 257
Inscription: 27 Juin 2005

Message le Mer Mar 08, 2006 11:42

a ma connaissance, il faut de faire une fonction:
str_replace(array("é","è"),array("e","e"),$str) ou un truc du style


Leonick
WRInaute accro
WRInaute accro
 
Messages: 19592
Inscription: 8 Aoû 2004

Message le Mer Mar 08, 2006 11:54

Code: Tout sélectionner
$nom=strtr($nom,"()!$'?:
    ,&+-/.ŠŒŽšœžŸ¥µÀÁÂÃÄÅÆÇÈÉÊËÌÍÎÏÐÑÒÓÔÕÖØÙÚÛÜÝßàáâãäåæçèéêëìíîïðñòóôõöøùúûüýÿ",
    "--------------SOZsozYYuAAAAAAACEEEEIIIIDNOOOOOOUUUUYsaaaaaaaceeeeiiiionoooooouuuuyy");
Avec ça, ça devrait le faire :wink:

thierry8
WRInaute accro
WRInaute accro
 
Messages: 3251
Inscription: 11 Juil 2005

Message le Mer Mar 08, 2006 12:26

ah ok tout simplement.
Je pensais qu'il y avait peu être un équivalent en php.
Une fonction déjà existante.

Et bien je te remercie beaucoup !!!!!!!!


e-kiwi
Modérateur
Modérateur
 
Messages: 15617
Inscription: 23 Déc 2003

Message le Mer Mar 08, 2006 12:59

pour une autre utilisation, http://fr3.php.net/htmlspecialchars


Leonick
WRInaute accro
WRInaute accro
 
Messages: 19592
Inscription: 8 Aoû 2004

Message le Mer Mar 08, 2006 13:06

Oui, mais en général, quand on veut enlever tous les caractères accentués d'une chaîne c'est pour créer une url propre, et justement pour éviter d'avoir des é dans l'url


rottman
WRInaute passionné
WRInaute passionné
 
Messages: 2121
Inscription: 6 Jan 2004

Message le Mer Mar 08, 2006 13:18

Si c'est pour une url :

Code: Tout sélectionner
function str2url ($str) {

               $str = strtr($str,"ÀÁÂÃÄÅàáâãäåÇçÒÓÔÕÖØòóôõöøÈÉÊËèéêëÌÍÎÏìíîïÙÚÛÜùúûüÿÑñ",
               "AAAAAAaaaaaaCcOOOOOOooooooEEEEeeeeIIIIiiiiUUUUuuuuyNn");

               $str = strtolower(trim ($str) ) ;

               $str = preg_replace ('/[^a-z0-9\-\.,\*]/', '-', $str) ;
               $str = preg_replace ('/([\-\.,\*]{2,})/ue', "substr('\\1', 0, 1)", $str) ;
               $str = preg_replace ('/^[^a-z0-9]|[^a-z0-9]$/', '', $str ) ;

               return ($str) ;

}

thierry8
WRInaute accro
WRInaute accro
 
Messages: 3251
Inscription: 11 Juil 2005

Message le Mer Mar 08, 2006 14:00

MON MESSAGE A ETE SUPPRIME ?

rottman a écrit:Si c'est pour une url :

Code: Tout sélectionner
function str2url ($str) {

               $str = strtr($str,"ÀÁÂÃÄÅàáâãäåÇçÒÓÔÕÖØòóôõöøÈÉÊËèéêëÌÍÎÏìíîïÙÚÛÜùúûüÿÑñ",
               "AAAAAAaaaaaaCcOOOOOOooooooEEEEeeeeIIIIiiiiUUUUuuuuyNn");

               $str = strtolower(trim ($str) ) ;

               $str = preg_replace ('/[^a-z0-9\-\.,\*]/', '-', $str) ;
               $str = preg_replace ('/([\-\.,\*]{2,})/ue', "substr('\\1', 0, 1)", $str) ;
               $str = preg_replace ('/^[^a-z0-9]|[^a-z0-9]$/', '', $str ) ;

               return ($str) ;

}


Pour ma compréhension:

Code: Tout sélectionner
$str = preg_replace ('/[^a-z0-9\-\.,\*]/', '-', $str) ;

Pourquoi \-\.,\* ?

Code: Tout sélectionner
$str = preg_replace ('/([\-\.,\*]{2,})/ue', "substr('\\1', 0, 1)", $str) ;
$str = preg_replace ('/^[^a-z0-9]|[^a-z0-9]$/', '', $str ) ;

:?: :? :?:

Et pourquoi mette / en début et fin de chaine sur le preg ?


En tout cas, merci. C'était justement pour une url.


rottman
WRInaute passionné
WRInaute passionné
 
Messages: 2121
Inscription: 6 Jan 2004

Message le Mer Mar 08, 2006 14:04

thierry8 a écrit:Et pourquoi mette / en début et fin de chaine sur le preg ?


Parce que c'est la regle :lol:

thierry8
WRInaute accro
WRInaute accro
 
Messages: 3251
Inscription: 11 Juil 2005

Message le Mer Mar 08, 2006 14:09

rottman a écrit:
thierry8 a écrit:Et pourquoi mette / en début et fin de chaine sur le preg ?


Parce que c'est la regle :lol:

Oui autant pour moi.
Je ne m'en sert que rarement donc je n'ai pas la syntaxe en tête.
Désolé.

Peux tu m'éclairer pour le reste ?

thierry8
WRInaute accro
WRInaute accro
 
Messages: 3251
Inscription: 11 Juil 2005

Message le Mer Mar 08, 2006 21:05

NON ?


rottman
WRInaute passionné
WRInaute passionné
 
Messages: 2121
Inscription: 6 Jan 2004

Message le Mer Mar 08, 2006 21:18

thierry8 a écrit:NON ?


C'est tout simplement destiné à remplacer les caractères en question par des -


Le script vient de dotclear :wink:

thierry8
WRInaute accro
WRInaute accro
 
Messages: 3251
Inscription: 11 Juil 2005

Message le Mer Mar 08, 2006 21:38

Oui mais il est utile de savoir comment fonctionne ce que l'on utilise, non ?

Code: Tout sélectionner
$str = preg_replace ('/[^a-z0-9\-\.,\*]/', '-', $str) ;

Là, il n'est indiqué que quelques signe de ponctuation...

Code: Tout sélectionner
$str = preg_replace ('/([\-\.,\*]{2,})/ue', "substr('\\1', 0, 1)", $str) ;

Là, je ne saisis pas...
Le substr('\\1', 0, 1) travail sur rien ?
Si quelqu'un pouvait m'expliquer.... :?

Code: Tout sélectionner
$str = preg_replace ('/^[^a-z0-9]|[^a-z0-9]$/', '', $str ) ;

ALors la, grand mystère....
Deux fois [^a-z0-9]|[^a-z0-9] avec un OU entre ????? 8O

Ca serait vraiment cool, si quelqu'un de calé dans les expressions régulières pouvait filler un coup de main ! ;)

Tisha
WRInaute discret
WRInaute discret
 
Messages: 54
Inscription: 20 Aoû 2003

Message le Jeu Mar 09, 2006 14:56

C'est pour formater un nom de domaine? c'est ça?

thierry8 a écrit:Oui mais il est utile de savoir comment fonctionne ce que l'on utilise, non ?

Code: Tout sélectionner
$str = preg_replace ('/[^a-z0-9\-\.,\*]/', '-', $str) ;

Là, il n'est indiqué que quelques signe de ponctuation...


Ce sont les caractères autorisés dans un nom de domaine. Si c'est pour une adresse complète, il manque au moins les caractères "?/=&,%;:". Enlever cette ligne ne serait pas un mal, ou bien la remplacer par quelque chose comme
Code: Tout sélectionner
$str = preg_replace ('/[^a-z0-9:=&%\-\.\,\?\/,\*]/', '', $str) ;

et j'ai la désagréable sensation d'avoir oublié des caractères :?

thierry8 a écrit:
Code: Tout sélectionner
$str = preg_replace ('/([\-\.,\*]{2,})/ue', "substr('\\1', 0, 1)", $str) ;

Là, je ne saisis pas...
Le substr('\\1', 0, 1) travail sur rien ?
Si quelqu'un pouvait m'expliquer.... :?


Les caractères "-." qui seront consécutivement en double ou plus seront réduit à un seul caractère. Par exemple, "-----.." deviendra "-.". le "\\1" dans le "substr" est le résultat de la parenthèse "([\-\.,\*]{2,})". Par contre, un nom de domaine "a---b.com" est tout à fait légal, mais cette ligne le transformera en "a-b.com". Donc le "-" serait à enlever du range et pour une adresse complète du style "http://www.example.com/test..html" est, il me semble, tout à fait légal. Donc je dirais d'enlever tout simplement cette ligne.

thierry8 a écrit:
Code: Tout sélectionner
$str = preg_replace ('/^[^a-z0-9]|[^a-z0-9]$/', '', $str ) ;

ALors la, grand mystère....
Deux fois [^a-z0-9]|[^a-z0-9] avec un OU entre ????? 8O


Un nom de domaine ne peut pas commencer ou finir par "-" donc la partie "^[^a-z0-9]" dit "tout ce qui ne commence pas par" et la partie "[^a-z0-9]$" dit "tout ce qui ne se termine pas par". Bref, ça détruit un caractère "-" qui serait au début et/ou à la fin... et la même chose pour le caractère ".".

thierry8 a écrit:Ca serait vraiment cool, si quelqu'un de calé dans les expressions régulières pouvait filler un coup de main ! ;)


oups, ce n'est pas réellement mon cas :(

tisha

thierry8
WRInaute accro
WRInaute accro
 
Messages: 3251
Inscription: 11 Juil 2005

Message le Jeu Mar 09, 2006 15:13

Et bien : un grand grend merci !!!!!!!


Et tu t'en sort plutôt bien dans les expressions régulières ! ;)


C'est super sympa ! Merci, j'ai tout compris ! ;)


Si vous avez aimé cette discussion, partagez-la sur vos réseaux sociaux préférés :

Lectures recommandées sur ce thème :



Qui est en ligne

Utilisateurs parcourant ce forum: Aucun utilisateur enregistré et 1 invité