Aller au contenu

Purger du texte pour en faire une url


Sujets conseillés

Posté (modifié)

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 :

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

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

ou encore

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

Modifié par doomer2
Posté

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

Veuillez vous connecter pour commenter

Vous pourrez laisser un commentaire après vous êtes connecté.



Connectez-vous maintenant
×
×
  • Créer...