Optimiser une chaine pour la réécriture d'URL

Ce code est une fonction qui permet d'optimiser une chaine de caractère pour la placer dans une url, afin de faire de la réécriture d'url (url rewriting) et de jolies URLs.


Information sur les mises à jour

Dernière mise à jour :

09 Août 2019
refactoring du code en PHP 7
fonctionnement du code vérifié
correction du code
amélioration du code
modification de la description

10 945  vues
Compatibilité du code
PHP 5, PHP 7 et PHP 8
  code classé dans   URL - Liens
  code source classé dans   URL - Liens
 
01
02
03
04
05
06
07
08
09
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
                    
<?php
/*------------------------------*/
/*
Titre : Optimiser une chaine pour la réécriture d'URL

Auteur : crocxx
Date édition : 22 Fev 2008
Date mise a jour : 09 Aout 2019

Rapport de la maj:
- refactoring du code en PHP 7
- fonctionnement du code vérifié
- correction du code
- amélioration du code
- modification de la description
*/
/*------------------------------*/

function OptimiseUrl($chaine)
{
$chaine=strtolower($chaine);

$accents = Array("/é/", "/è/", "/ê/", "/à§/", "/à /",
"/à¢/", "/à®/", "/à¯/","/à¹/", "/à´/");
$sans = Array("e", "e", "e", "c", "a", "a", "i", "i", "u", "o");

$chaine = preg_replace($accents, $sans,$chaine);


$entre = array(' ','?', '!', '.', ',', ':', "'", '&', '(', ')','"','/');
$sortie = array('-', '-', '-', '-', '-', '-', '-', '-', '-', '-','-');
$chaine = str_replace($entre, $sortie, $chaine);


$modifchaine=true;
while($modifchaine==true)
{
$modifchaine=false;

if(preg_match('#--#',$chaine))
{
$chaine = str_replace('--','-',$chaine);
$modifchaine=true;
}
}

return $chaine;
}
?>
<?php
/*------------------------------*/
/*
Titre : Optimiser une chaine pour la réécriture d'URL

Auteur : crocxx
Date édition : 22 Fev 2008
Date mise a jour : 09 Aout 2019

Rapport de la maj:
- refactoring du code en PHP 7
- fonctionnement du code vérifié
- correction du code
- amélioration du code
- modification de la description
*/
/*------------------------------*/

function OptimiseUrl($chaine)
{
$chaine=strtolower($chaine);

$accents = Array("/é/", "/è/", "/ê/", "/à§/", "/à /",
"/à¢/", "/à®/", "/à¯/","/à¹/", "/à´/");
$sans = Array("e", "e", "e", "c", "a", "a", "i", "i", "u", "o");

$chaine = preg_replace($accents, $sans,$chaine);


$entre = array(' ','?', '!', '.', ',', ':', "'", '&', '(', ')','"','/');
$sortie = array('-', '-', '-', '-', '-', '-', '-', '-', '-', '-','-');
$chaine = str_replace($entre, $sortie, $chaine);


$modifchaine=true;
while($modifchaine==true)
{
$modifchaine=false;

if(preg_match('#--#',$chaine))
{
$chaine = str_replace('--','-',$chaine);
$modifchaine=true;
}
}

return $chaine;
}
?>

Exemple :

 
01
02
03
04
                    
<?php
echo OptimiseUrl ( 'Le titre de votre article 2019' );
// affiche: le-titre-de-votre-article-2019
?>
<?php
echo OptimiseUrl ( 'Le titre de votre article 2019' );
// affiche: le-titre-de-votre-article-2019
?>

      Fonctions du code - Doc officielle PHP

   php.net  
Description
Versions PHP
    array
Crée un tableau
PHP 4, 5, 7 et 8
    echo
Affiche une chaîne de caractères
PHP 4, 5, 7 et 8
    preg_match
Effectue une recherche de correspondance avec une expression rationnelle standard
PHP 4, 5, 7 et 8
    preg_replace
Rechercher et remplacer par expression rationnelle standard
PHP 4, 5, 7 et 8
    return
Retourne le controle du programme au module appelant
PHP 4, 5, 7 et 8
    strtolower
Renvoie une chaîne en minuscules
PHP 4, 5, 7 et 8
    str_replace
Remplace toutes les occurrences dans une chaîne
PHP 4, 5, 7 et 8

[1]

  • avatar

    Invité

    08 Nov 2008 à 23:32

    Salut,

    Une ch'tiote fonction trouvée sur WRI et qui s'avère très pratique. Elle renvoie l'url sous la forme exemple : news-43-la-lune-est-belle.html ou encore sir $id n'est pas renseigné, on écrira simplement news-la-lune-est-belle.html

    Elle enlève les caractères spéciaux ainsi que les entités html & cie..

    function rw( $name_module, $id, $texte )
    {
    // Définition des caractères accentués
    $car_speciaux = array( 'À', 'Á', 'Â', 'Ã', 'Ä', 'Å', 'Æ', 'à', 'á', 'â', 'ã', 'ä', 'å', 'æ', 'È', 'É', 'Ê', 'Ë', 'è', 'é', 'ê', 'ë', 'Ì', 'Í', 'Î', 'Ï', 'ì', 'í', 'î', 'ï', 'Ò', 'Ó', 'Ô', 'Õ', 'Ö', 'Ø', 'ò', 'ó', 'ô', 'õ', 'ö', 'ø', 'Ù', 'Ú', 'Û', 'Ü', 'ù', 'ú', 'û', 'ü', 'ß', 'Ç', 'ç', 'Ð', 'ð', 'Ñ', 'ñ', 'Þ', 'þ', 'Ý' );
    // ... et de leurs "équivalents" non-accentués
    $car_normaux = array( 'A', 'A', 'A', 'A', 'A', 'A', 'A', 'a', 'a', 'a', 'a', 'a', 'a', 'a', 'E', 'E', 'E', 'E', 'e', 'e', 'e', 'e', 'I', 'I', 'I', 'I', 'i', 'i', 'i', 'i', 'O', 'O', 'O', 'O', 'O', 'O', 'o', 'o', 'o', 'o', 'o', 'o', 'U', 'U', 'U', 'U', 'u', 'u', 'u', 'u', 'B', 'C', 'c', 'D', 'd', 'N', 'n', 'P', 'p', 'Y' );

    // On commence par supprimer les accents
    $texte = str_replace($car_speciaux, $car_normaux, $texte);

    // On supprime les entités html
    $texte = strip_tags( $texte );

    // On remplace les caractères non-alphanumériques par le séparateur $sep_mots
    $texte = preg_replace( "/[^A-Za-z0-9]+/", "-", $texte );

    // On supprime le séparateur s'il se trouve en début ou fin de chaîne
    $texte = trim( $texte, "-" );

    // On limite la chaine à un nombre maxi de caractères (ici 50 caractères)
    $texte = substr( $texte, 0, 50 );

    // On convertit le tout en minuscules
    $texte = strtolower( $texte );

    // On ajoute l'id à la fin pour avoir une url unique et on ajoute l'extension (ici .html)
    $texte = "$name_module".($id>0 ? '-'.$id : '')."-$texte.html";

    // On retourne le résultat
    return ( $texte );
    }

Minimum 10 mots. Votre commentaire sera visible après validation.


 Autres snippets qui pourraient vous intéresser

Test une chaine pour savoir si c'est de l'UTF8 via PHP

Compatibilité : PHP 5, PHP 7, PHP 8

Pour vos passages de la norme ISO à la norme UTF8, test utile pour savoir si vous devez ou non ré encoder en UTF8

Urlrewriting basique - Réécriture des urls

Compatibilité : PHP 5, PHP 7, PHP 8

Fonction simple qui réécrit une url en friendly url. Cette fonction ne prend pas en compte les caractères spéciaux.

* Requêtes exécutées avec Recherche Contextuelle
avatar

Crocxx

  22 Fév 2008

  SOURCE   Télécharger

Information sur les mises à jour

Dernière mise à jour :

09 Août 2019
refactoring du code en PHP 7
fonctionnement du code vérifié
correction du code
amélioration du code
modification de la description

10 945 Vues
Compatibilité du code
PHP 5, PHP 7, PHP 8