doomer2 Posté 21 Décembre 2007 Posté 21 Décembre 2007 (modifié) Bonjour, Je souhaiterais purger du texte qui contient les caracteres suivants : , ( ) ! ? des majuscules des accents et je souhaite en faire des une url du type mot1-mot2-mot3.html J'ai donc fais ceci : $title = str_replace('(', '', $title); $title = str_replace(')', '', $title); $title = str_replace('!', '', $title); $title = str_replace('.', '', $title); $title = str_replace(',', '', $title); $title = str_replace('?', '', $title);$title2 = mb_strtolower($title); $title2 = strtr($title, " ,.'àáâãäçèéêëìíîïñòóôõöùúûüýÿÀÁÂÃÄÇÈÉÊËÌÍÎÏÑÒÓÔÕÖÙÚÛÜÝ", "-----aaaaaceeeeiiiinooooouuuuyyAAAAACEEEEIIIINOOOOOUUUUY"); cela me fait une chaine de caracteres comme je veux pratiquement sauf que logiquement je remplace bien les accents dans la chaine et je me retrouve avec ce genre de choses, mon entete est en UTf8 : http://www.site.com/paris-france---hurghada-a%EF%BF%BDgypte.html ou encore http://www.site.com/paris-france---alger-a...F%BF%BDrie.html A votre avis où cela cloche t'il ? Peut etre qu'il y a plus simple pour purger cette chaine de caracteres ? Merci de votre aide Modifié 21 Décembre 2007 par doomer2
captain_torche Posté 21 Décembre 2007 Posté 21 Décembre 2007 J'utilise généralement cet ensemble de trois fonctions, qui ont l'avantage de cibler d'éventuels caractères auxquels tu n'aurais pas pensé CODE <?php function enleve_accents($chaine) { // Transforme la chaîne en son équivalent HTML, (à devient à), puis supprime les caractères superflus (ici, '&' et 'grave;') $reg = '/&(.)(acute|grave|circ|uml|cedil|ring|tilde|slash);/'; return preg_replace($reg, '\1', htmlentities($chaine)); } function suppr_speciaux($chaine) { // A n'utiliser qu'après enleve_accents, sinon on supprimerait également les caractères accentués // On isole tous les caractères spéciaux (commençant par '&' et finissant par ';', pour les supprimer $reg = '|(&[a-z]*|U'; return preg_replace($reg, '', $chaine); } function nettoie_url($texte) { // On commence par enlever les lettres accentuées et les caractères spéciaux (dans cet ordre) $texte = strtolower(suppr_speciaux(enleve_accents($texte))); // On remplace ensuite tout caractère (ou suite de caractères) non alphanumérique par un tiret $reg = '|([^a-z0-9]+)|'; $texte = preg_replace($reg, '-', $texte); // On finit par supprimer le tiret final, s'il y a lieu $derniere_lettre = substr($texte, strlen($texte)-1, 1); if($derniere_lettre == '-') $texte = substr($texte, 0, strlen($texte)-1); return $texte; } echo nettoie_url("Titre de news un peu barbare avec des lettres accentuées (il faut bien, pour tester correctement)"); ?> Ca devrait aboutir à "titre-de-news-un-peu-barbare-avec-des-lettres-accentuees-il-faut-bien-pour-tester-correctement".
Sujets conseillés
Veuillez vous connecter pour commenter
Vous pourrez laisser un commentaire après vous êtes connecté.
Connectez-vous maintenant