Télécharger
Noter:

Ajouté le 2022-01-30
Visionné 4947 fois
5/5 (2)

Tuto PHP rewriting URL

Description

Cette fonction retourne n'importe quel chaine de caractère sans accent et sans caractère autre que des chiffre,lettres et -, elle vous permet de convertir un titre de sujet en chaine de caractères compatibles pour L'URL rewriting, pour votre site, blog ou forum par exemple.

Sont utilisation est simple:

$MaChaine="À bientôt!";
$MaChaine=titre_url_rewrite($MaChaine);
echo $MaChaine;// a-bientot
//Est prévue pour un encodage en UTF-8, si vous utilisez ISO il vous faudra passer chaque caractère avec utf8_encode() si ça fait des caractères bizarres de type '?' ou un caractère losange
function remplacerAccent($chaine){
$a = ['à','á','â','ã','ä','å', 'æ','Ā','ā','Ă','ă','Ą','ą','À','Á','Â','Ã','Ä','Å', 'Æ','ç','Ç','Ð','Ć','ć','Ĉ','ĉ','Ċ','ċ','Č','č','Ď','ď','Đ','đ','È','É','Ê','Ë','è','é','ê','ë','Ē','ē','Ė','ė','Ę','ę','Ě','ě','ƒ', 'fi', 'fl','Ĝ','ĝ','Ğ','ğ','Ġ','ġ','Ģ','ǵ','Ĥ','ĥ','Ħ','ħ','Ì','Í','Î','Ï','ì','í','î','ï','Ĩ','ĩ','Ī','ī','Į','į','İ','ı', 'IJ', 'ij','Ĵ','ĵ','Ķ','ķ','ĸ','Ĺ','ĺ','Ļ','ļ','Ľ','ľ','Ŀ','ŀ','Ł','ł','ñ','Ñ','Ń','ń','Ņ','ņ','Ň','ň','ʼn','Ŋ','ŋ','Ò','Ó','Ô','Õ','Ö','ð','ò','ó','ô','õ','ö','ø','Ø','Ō','ō','Ő','ő', 'Œ', 'œ','Ŕ','ŕ','Ŗ','ŗ','Ř','ř','ß','ẞ','Ś','ś','Ŝ','ŝ','Ş','ş','Š','š','Ţ','ţ','Ť','ť','Ŧ','ŧ','Ù','Ú','Û','Ü','Ũ','ũ','Ū','ū','Ŭ','ŭ','Ů','ů','Ű','ű','Ų','ų','ù','ú','û','ü','Ŵ','ŵ','×','Ý','Ŷ','ŷ','Ÿ','ý','ÿ','Ź','ź','Ż','ż','Ž','ž','Ƶ'];
$b = ['a','a','a','a','a','a','ae','A','a','A','a','A','a','A','A','A','A','A','A','AE','c','C','D','C','c','C','c','C','c','C','c','D','d','D','d','E','E','E','E','e','e','e','e','E','e','E','e','E','e','E','e','f','fi','fl','G','g','G','g','G','g','G','g','H','h','H','h','I','I','I','I','i','i','i','i','I','i','I','i','I','i','I','i','IJ','ij','J','j','K','k','k','L','l','L','l','L','l','L','l','L','l','n','N','N','n','N','n','N','n','n','N','n','O','O','O','O','O','o','o','o','o','o','o','o','O','O','o','O','o','OE','oe','R','r','R','r','R','R','s','S','S','s','S','s','S','s','S','s','T','t','T','t','T','t','U','U','U','U','U','u','U','u','U','u','U','u','U','u','U','u','u','u','u','u','W','w','x','Y','Y','y','Y','y','y','Z','z','Z','z','Z','z','Z'];
return str_replace($a, $b, $chaine);
}
function titre_url_rewrite($titre){
$c = remplacerAccent($titre);
$retour = '';//notre variable qui sera envoyée en retour est pour le moment vide, on l'initialise
for($i=0;$i<=strlen($c)-1;$i++){//on vérifie les caractères de la chaine, un par un
$caractere = strtolower(substr($c,$i,1));//on met le caractère en minuscule
//on construit notre chaine de retour
$retour .= preg_match("#^[a-z0-9_]+$#",$caractere) ? $caractere : "-";//on remplace tout ce qui n'est pas un chiffre, une lettre, un tiret ou un underscore _, par des -
}
for($i=0;$i<=strlen($c)-1;$i++) {
$retour = str_replace("--","-",$retour);//on enlever les tiret successifs
}
$retour = substr($retour,-1) == "-" ? substr($retour,0,-1) : $retour;//si le dernier caractère est un tiret, on le retire
$retour = substr($retour,0,1) == "-" ? substr($retour,1) : $retour;//si le premier caractère est un tiret, on le retire
return $retour;//en fin, on retourne la chaine convertie, prêt à être utilisée pour l'url rewriting!
}


Configuration de votre .htaccess, tutoriel rapide


Vous pouvez afficher la page PHP de votre choix sous n'importe quel format, par exemple sous le format .html:

Fichier .htaccess

# on active la réécriture d'URL:
RewriteEngine on

# on réécrit notre URL:
RewriteRule ^nom-dans-le-navigateur.html$ la-vraie-page.php [L]

Explication des caractères utilisés


RewriteRule Demande à réécrire la chaine qui suit

^ Indique que le chaine doit commencer par

$ Indique que la chaine doit se terminer par (dans l'exemple: si on tape dans le navigateur nom-dans-le-navigateur.html, ça matchera et affichera en réalité la-vraie-page.php) le-nom-dans-le-navigateur.html ou nom-dans-le-navigateur.htm ne fonctionnera pas

[L] On appel cela un drapeau (flag) L permet d'arrêter la recherche de règle si cette règle satisfait la demande

Astuce:

Si parfois vous avez besoin d'accepter des paramètres dans l'URL (ex: nom-dans-le-navigateur.html?param=1&etc=...) utilisez en plus le drapeau QSA, en plus (QSA pour Query String Append):
RewriteRule ^nom-dans-le-navigateur.html$ la-vraie-page.php [L,QSA]



Fichier .htaccess : Utilisation avec des id de la base de données, dans l'URL

# Vous pouvez utiliser les expressions régulières dans htaccess, pour un id ce sera:
RewriteRule ^nom-dans-le-navigateur-([0-9]+).html$ la-vraie-page.php?id=$1 [L]

# ici (entre parenthèses), on demande à ce que ce soit un chiffre de 0 à 9 (une unité seulement) "[0-9]" mais avec le signe +, il peut aussi être un nombre plus grand (ex: 234)

# L'entourer de parenthèses nous permet de le récupérer plus loin avec dollar1 ($1)

# Si vous avez plusieurs paramètres dans l'URL, ce nombre augmente au fur et à mesure que vous utilisez de parenthèses, exemples avec deux paramètres:
RewriteRule ^([a-z-]+)-([0-9]+).html$ la-vraie-page.php?id=$2&nom=$1 [L]

# ici on demande à ce que ce soit une lettre de a à z (en minuscule, si vous voulez aussi les majuscules, il faut rajouter A-Z dans l'expression, comme ceci: [a-zA-Z-]) et avec le signe +, il peut aussi être une chaine de caractères. Le tiret est accepté, ex qui fonctionnera avec cette expression: ma-chaine-12345.html

#vous remarquerez que j'ai mis id=$2 car les parenthèses des nombres sont en second dans la réécriture (c'est pour l'exemple, en réalité pour un lecture plus aisée, je conseil de mettre 1 en premier puis 2...)



Besoin de travaux pour votre site ?

Je suis disponible, contactez-moi !

Commentaires

Ajouter un commentaire

Commenter
Pseudo/Nom
Email
Message
Captcha
memo2
Commenter

Natacha le 03 Juin 2022 à 12:20

Super ! merci pour ce tuto, clair et précis ça fonctionne parfaitement
Natacha

Retour à la liste des scripts