IdentifiantMot de passe
Loading...
Mot de passe oublié ?Je m'inscris ! (gratuit)
Navigation

Inscrivez-vous gratuitement
pour pouvoir participer, suivre les réponses en temps réel, voter pour les messages, poser vos propres questions et recevoir la newsletter

Langage PHP Discussion :

Function php pour url rewriting


Sujet :

Langage PHP

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre éclairé
    Homme Profil pro
    Webmaster
    Inscrit en
    Juillet 2015
    Messages
    518
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 38
    Localisation : France, Hauts de Seine (Île de France)

    Informations professionnelles :
    Activité : Webmaster

    Informations forums :
    Inscription : Juillet 2015
    Messages : 518
    Par défaut Function php pour url rewriting
    Salut à tous,

    Je fais une function php pour nettoyer une chaîne (le titre d'une annonce) dans le but d'utiliser le titre dans l'url, comme url rewriting.

    du coup voici ma function :

    Code php : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    function url_rewriting($chaine) {
     
        // Supprime les espaces (ou d'autres caractères) en début et fin de chaîne
        $chaine = trim($chaine);
     
        // Remplace des caractères dans une chaîne
        $chaine = strtr($chaine,
            "ÀÁÂÃÄÅàáâãäåÒÓÔÕÖØòóôõöøÈÉÊËèéêëÇçÌÍÎÏìíîïÙÚÛÜùúûüÿÑñ",
            "aaaaaaaaaaaaooooooooooooeeeeeeeecciiiiiiiiuuuuuuuuynn");
     
        // Renvoie une chaîne en minuscules
        $chaine = strtolower($chaine);
     
        // les caracètres spéciaux (aures que lettres et chiffres)
        $chaine = preg_replace('/([^.a-z0-9]+)/i', '-', $chaine);
        return $chaine;
    }

    et là.. par exemple pour la chaine : "Solfège" il m'affiche "solfn-ge"

    avez-vous une idée ? ou même une meilleure solution pour nettoyer une chaîne et pouvoir l'utiliser dans les url ?

    merci à vous

  2. #2
    Expert confirmé

    Homme Profil pro
    Développeur Web
    Inscrit en
    Septembre 2010
    Messages
    5 420
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Puy de Dôme (Auvergne)

    Informations professionnelles :
    Activité : Développeur Web
    Secteur : High Tech - Multimédia et Internet

    Informations forums :
    Inscription : Septembre 2010
    Messages : 5 420
    Par défaut
    Utilises str_replace à la place de strtr qui n'est pas compatible utf-8.

    EDIT sinon concernant ton regex, dans certains cas tu va te retrouver avec plusieurs occurrences successives de '-' qu'il faudrait penser à supprimer si possible.

  3. #3
    Invité
    Invité(e)
    Par défaut
    Voilà ce que j'utilise :

    Code php : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    31
    32
    33
    34
    35
    36
    37
    38
    39
    40
    41
    42
    43
    44
    45
    46
    47
    48
    49
    50
    51
    52
    53
    54
    55
    56
    57
    58
    59
    60
    61
    62
    63
    64
    65
    66
    67
    68
    69
    70
    71
    72
    73
    74
    75
    76
    77
    78
    79
    80
    81
    82
    83
    84
    85
    86
    87
    88
    89
    90
    91
    92
    93
    94
    95
    96
    97
    98
    99
    100
    101
    102
    103
    104
    105
    106
    107
    108
    109
    <?php
    // --------------------------------------------------------------
    // FONCTION : FORMATAGE sans accents
    // --------------------------------------------------------------
    function formatage_sans_accent( $chaine )
    {
    	$chaine = html_entity_decode( $chaine ); 		// Convertit les entités HTML spéciales en caractères
    	// -----------------
    	// remplacement : caractères accentués et espace
    	$NON_array 			= array(
    	'À', 'Á', 'Â', 'Ã', 'Ä', 'Å', 'Æ', 'Ă', 'Ą',
    	'Ç', 'Ć', 'Č', 'Œ',
    	'Ď', 'Đ',
    	'à', 'á', 'â', 'ã', 'ä', 'å', 'æ', 'ă', 'ą',
    	'ç', 'ć', 'č', 'œ',
    	'ď', 'đ',
    	'È', 'É', 'Ê', 'Ë', 'Ę', 'Ě',
    	'Ğ',
    	'Ì', 'Í', 'Î', 'Ï', 'İ',
    	'Ĺ', 'Ľ', 'Ł',
    	'è', 'é', 'ê', 'ë', 'ę', 'ě',
    	'ğ',
    	'ì', 'í', 'î', 'ï', 'ı',
    	'ĺ', 'ľ', 'ł',
    	'Ñ', 'Ń', 'Ň',
    	'Ò', 'Ó', 'Ô', 'Õ', 'Ö', 'Ø', 'Ő',
    	'Ŕ', 'Ř',
    	'Ś', 'Ş', 'Š',
    	'ñ', 'ń', 'ň',
    	'ò', 'ó', 'ô', 'ö', 'ø', 'ő',
    	'ŕ', 'ř',
    	'ś', 'ş', 'š',
    	'Ţ', 'Ť',
    	'Ù', 'Ú', 'Û', 'Ų', 'Ü', 'Ů', 'Ű',
    	'Ý', 'ß',
    	'Ź', 'Ż', 'Ž',
    	'ţ', 'ť',
    	'ù', 'ú', 'û', 'ų', 'ü', 'ů', 'ű',
    	'ý', 'ÿ',
    	'ź', 'ż', 'ž',
    	'А', 'Б', 'В', 'Г', 'Д', 'Е', 'Ё', 'Ж', 'З', 'И', 'Й', 'К', 'Л', 'М', 'Н', 'О', 'П', 'Р',
    	'а', 'б', 'в', 'г', 'д', 'е', 'ё', 'ж', 'з', 'и', 'й', 'к', 'л', 'м', 'н', 'о', 'р',
    	'С', 'Т', 'У', 'Ф', 'Х', 'Ц', 'Ч', 'Ш', 'Щ', 'Ъ', 'Ы', 'Ь', 'Э', 'Ю', 'Я',
    	'с', 'т', 'у', 'ф', 'х', 'ц', 'ч', 'ш', 'щ', 'ъ', 'ы', 'ь', 'э', 'ю', 'я'
    	);
     
    	$OUI_array = array(
    	'A', 'A', 'A', 'A', 'A', 'A', 'AE', 'A', 'A',
    	'C', 'C', 'C', 'CE',
    	'D', 'D',
    	'a', 'a', 'a', 'a', 'a', 'a', 'ae', 'a', 'a',
    	'c', 'c', 'c', 'ce',
    	'd', 'd',
    	'E', 'E', 'E', 'E', 'E', 'E',
    	'G',
    	'I', 'I', 'I', 'I', 'I',
    	'L', 'L', 'L',
    	'e', 'e', 'e', 'e', 'e', 'e',
    	'g',
    	'i', 'i', 'i', 'i', 'i',
    	'l', 'l', 'l',
    	'N', 'N', 'N',
    	'O', 'O', 'O', 'O', 'O', 'O', 'O',
    	'R', 'R',
    	'S', 'S', 'S',
    	'n', 'n', 'n',
    	'o', 'o', 'o', 'o', 'o', 'o',
    	'r', 'r',
    	's', 's', 's',
    	'T', 'T',
    	'U', 'U', 'U', 'U', 'U', 'U', 'U',
    	'Y', 'Y',
    	'Z', 'Z', 'Z',
    	't', 't',
    	'u', 'u', 'u', 'u', 'u', 'u', 'u',
    	'y', 'y',
    	'z', 'z', 'z',
    	'A', 'B', 'B', 'r', 'A', 'E', 'E', 'X', '3', 'N', 'N', 'K', 'N', 'M', 'H', 'O', 'N', 'P',
    	'a', 'b', 'b', 'r', 'a', 'e', 'e', 'x', '3', 'n', 'n', 'k', 'n', 'm', 'h', 'o', 'p',
    	'C', 'T', 'Y', 'O', 'X', 'U', 'u', 'W', 'W', 'b', 'b', 'b', 'E', 'O', 'R',
    	'c', 't', 'y', 'o', 'x', 'u', 'u', 'w', 'w', 'b', 'b', 'b', 'e', 'o', 'r'
    	);
     
    	$chaine = str_replace($NON_array, $OUI_array, $chaine);
    	// -----------------
    	return $chaine;
    }
     
     
    function url_rewriting($chaine) {
     
        // Supprime les espaces (ou d'autres caractères) en début et fin de chaîne
        $chaine = trim($chaine);
     
        // Remplace des caractères dans une chaîne
        $chaine = formatage_sans_accent( $chaine );
        // Renvoie une chaîne en minuscules
        $chaine = strtolower($chaine);
     
        // les caracètres spéciaux (aures que lettres et chiffres)
        $chaine = preg_replace('/([^.a-z0-9]+)/i', '-', $chaine);
     
        $chaine = str_replace('--', '-', $chaine); // enlève les - multiples
     
        $chaine = trim($chaine, '-'); // enlève les - en début et fin de chaine
     
        return $chaine;
    }
    ?>

    N.B. Pour peu que tu fasses le strtolower() AVANT le formatage_sans_accent(), tu peux réduire la liste des caractères dans formatage_sans_accent() (enlever toutes les majuscules).

    Code php : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    <?php
    $chaine = 'C\'était l\'Heure de la "Leçon" de Solfège-------------!';
    echo url_rewriting($chaine);
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    c-etait-l-heure-de-la-lecon-de-solfege

  4. #4
    Membre éclairé
    Homme Profil pro
    Webmaster
    Inscrit en
    Juillet 2015
    Messages
    518
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 38
    Localisation : France, Hauts de Seine (Île de France)

    Informations professionnelles :
    Activité : Webmaster

    Informations forums :
    Inscription : Juillet 2015
    Messages : 518
    Par défaut
    super les gars comme d'habitude ; rapidité et efficacité !

  5. #5
    Expert confirmé Avatar de CosmoKnacki
    Homme Profil pro
    Justicier interdimensionnel
    Inscrit en
    Mars 2009
    Messages
    2 986
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Charente Maritime (Poitou Charente)

    Informations professionnelles :
    Activité : Justicier interdimensionnel

    Informations forums :
    Inscription : Mars 2009
    Messages : 2 986
    Par défaut
    Moi je ferai comme ça:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    $str = "œÀÁÂÃÄÅàáâãäå##?ÒÓÔ##ÕÖØòóôõöøÈÉÊËèéêëÇçÌÍÎÏìíîïÙÚÛÜùúûüÿÑñ";
    // tu remplaces tout ce qui n'est pas un chiffre ou une lettre
    $str = preg_replace('~\P{Xan}+~u', '-', $str);
    // ici tu traites les caractères qui ne sont pas gérer par iconv comme le Ø
    $str = strtr(trim($str, '-'), ['Ø'=>'o', 'ø'=>'o']);
    // tu fais une translitération en ASCII
    $str = iconv('UTF-8', 'ASCII//TRANSLIT//IGNORE', $str);
    // puis tu passes en minuscule
    $str = strtolower($str);
     
    echo $str;

+ Répondre à la discussion
Cette discussion est résolue.

Discussions similaires

  1. Réponses: 3
    Dernier message: 18/02/2013, 05h15
  2. Concepteur web : PHP/MySQL, Url Rewriting, Web designer
    Par nnet_mathieu dans le forum Demandes
    Réponses: 0
    Dernier message: 02/08/2007, 19h12
  3. besoin d'aide pour URL Rewriting
    Par jbjweb dans le forum Apache
    Réponses: 19
    Dernier message: 29/06/2007, 01h23
  4. [URLRewriting] Regexp pour url rewriting
    Par lolodev dans le forum Apache
    Réponses: 2
    Dernier message: 14/06/2007, 14h33
  5. Aide pour url rewriting
    Par GarGamel55 dans le forum Apache
    Réponses: 2
    Dernier message: 12/10/2006, 09h14

Partager

Partager
  • Envoyer la discussion sur Viadeo
  • Envoyer la discussion sur Twitter
  • Envoyer la discussion sur Google
  • Envoyer la discussion sur Facebook
  • Envoyer la discussion sur Digg
  • Envoyer la discussion sur Delicious
  • Envoyer la discussion sur MySpace
  • Envoyer la discussion sur Yahoo