Version complète: sur le forum Webmaster Hub : Purger du texte pour en faire une url
Webmaster Hub > Création et exploitation de Sites Internet > Les langages du Net > PHP
doomer2
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 :

CODE
$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 :

CODE
http://www.site.com/paris-france---hurghada-a%EF%BF%BDgypte.html

ou encore
CODE
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
captain_torche
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".
doomer2
Merci captain ca fonctionne nickel ;-)
Ceci est une version "bas débit" de notre forum. Pour voir la version complète avec plus d'information, la mise en page et les images, veuillez cliquer ici.