Télécharger
Noter:

Ajouté le 28/10/2015
Visionné 3715 fois
5/5

Convertir une chaine PHP pour l'url rewriting

Description

Mise à jour: 31/03/2020
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 une chaine en titre de sujet pour L'URL de votre site blog ou forum.

Sont utilisation est simple, voici un exemple:
$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
function remplacerAccent($str){
$a=['À','Á','Â','Ã','Ä','Å','Æ','Ç','È','É','Ê','Ë','Ì','Í','Î','Ï','Ð','Ñ','Ò','Ó','Ô','Õ','Ö','Ø','Ù','Ú','Û','Ü','Ý','ß','à','á','â','ã','ä','å','æ','ç','è','é','ê','ë','ì','í','î','ï','ñ','ò','ó','ô','õ','ö','ø','ù', 'ú','û','ü','ý','ÿ','Ā','ā','Ă','ă','Ą','ą','Ć','ć','Ĉ','ĉ','Ċ','ċ','Č','č','Ď','ď','Đ','đ','Ē','ē','Ĕ','ĕ','Ė','ė','Ę','ę','Ě','ě','Ĝ','ĝ','Ğ','ğ','Ġ','ġ','Ģ','ģ','Ĥ','ĥ','Ħ','ħ','Ĩ','ĩ','Ī','ī','Ĭ','ĭ','Į','į','İ','ı','IJ','ij', 'Ĵ','ĵ','Ķ','ķ','Ĺ','ĺ','Ļ','ļ','Ľ','ľ','Ŀ','ŀ','Ł','ł','Ń','ń','Ņ','ņ','Ň','ň','ʼn','Ō','ō','Ŏ','ŏ','Ő','ő','Œ', 'œ', 'Ŕ','ŕ','Ŗ','ŗ','Ř','ř','Ś','ś','Ŝ','ŝ','Ş','ş','Š','š','Ţ','ţ','Ť','ť','Ŧ','ŧ','Ũ','ũ','Ū','ū','Ŭ','ŭ','Ů','ů','Ű','ű','Ų','ų','Ŵ','ŵ','Ŷ','ŷ','Ÿ','Ź','ź','Ż','ż','Ž','ž','ſ','ƒ','Ơ','ơ','Ư','ư','Ǎ','ǎ','Ǐ','ǐ','Ǒ','ǒ','Ǔ','ǔ','Ǖ','ǖ','Ǘ','ǘ','Ǚ','ǚ','Ǜ','ǜ','Ǻ','ǻ','Ǽ', 'ǽ', 'Ǿ','ǿ'];
$b=['A','A','A','A','A','A','AE','C','E','E','E','E','I','I','I','I','D','N','O','O','O','O','O','O','U','U','U','U','Y','s','a','a','a','a','a','a','ae','c','e','e','e','e','i','i','i','i','n','o','o','o','o','o','o','u','u','u','u','y','y','A','a','A','a','A','a','C','c','C','c','C','c','C','c','D','d','D','d','E','e','E','e','E','e','E','e','E','e','G','g','G','g','G','g','G','g','H','h','H','h','I','i','I','i','I','i','I','i','I','i','IJ','ij','J','j','K','k','L','l','L','l','L','l','L','l','L','l','N','n','N','n','N','n','n','O','o','O','o','O','o','OE','oe','R','r','R','r','R','r','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','W','w','Y','y','Y','Z','z','Z','z','Z','z','s','f','O','o','U','u','A','a','I','i','O','o','U','u','U','u','U','u','U','u','U','u','A','a','AE','ae','O','o'];
return str_replace($a,$b,$str);
}
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]

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:
Fichier .htaccess


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...)

Commentaires

Pas encore de commentaire ajouté, soyez le premier!

Ajouter un commentaire

Pseudo/Nom *
Email *
Message *
La balise [code]Votre code...[/code] peut être utilisée

Captcha * memo2

Les champs marqués d'un * sont obligatoires.

Retour à la liste des scripts

Flag Counter