[Résolu] Fonction supp petit mot et supp caractères spéciaux

Fonction supp petit mot et supp caractères spéciaux [Résolu] - PHP - Programmation

Marsh Posté le 09-08-2010 à 16:40:48    

Bonjour,
voila j'essaie de faire un script qui utiliserait le titre d'un article pour en générer une url.
Pour cela il me faut supprimer les mots inférieur a 4 lettres et remplacer les caractères spéciaux et lettres accentués.
j'ai donc fait deux fonctions une pour les caractères spéciaux et lettres accentués et une autre fonction pour les petit mots.
 

Citation :

function generation_url($chaine)  
{
$char = htmlentities(stripslashes(strtolower($chaine)),ENT_QUOTES) ;
 
 $cherche = array(""", "&", "€", "<", ">", "œ", "Ÿ", " ", "¡", "¢", "£", "¤",  
 "&yen", "¦", "§", "¨", "©", "ª", "«", "¬", "­", "®", "&masr;", "°", "±", "²",  
 "³", "´", "µ", "¶", "·", "¸", "¹", "º", "»", "¼", "½", "¾",  
 "¿", "À", "Á", "Â", "Ã", "Ä", "Å", "&Aelig", "Ç", "È", "É", "Ê",  
 "Ë", "Ì", "Í", "Î", "Ï", "ð", "Ñ", "Ò", "Ó", "Ô", "Õ", "Ö",  
 "×", "Ø", "Ù", "Ú", "Û", "Ü", "Ý", "þ", "ß", "à", "á", "â",
 "ã", "ä", "å", "æ", "ç", "è", "é", "ê", "ë", "ì", "í", "î",
 "ï", "ð", "ñ", "ò", "ó", "ô", "õ", "ö", "÷", "ø", "ù", "ú",  
 "û", "ü", "ý", "ÿ", "þ", " ", ",", ";", ".", ":", "!", "?", "/", "(", " )", "{", "}", "[", "]", "+", "=", "*",  
 "~", "&#039", "'" );
 
$remplace = array("", "", "", "", "", "oe", "y", "-", "i", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "",
 "", "", "", "", "", "", "", "", "", "a", "a", "a", "a", "a", "a", "a", "c", "e", "e", "e", "e", "i", "i", "i", "i", "d", "n", "o", "o", "o",  
 "o", "o", "", "", "u", "u", "u", "u", "y", "", "", "a", "a", "a", "a", "a", "a", "", "c", "e", "e", "e", "e", "i", "i", "i", "i", "o", "n",  
 "o", "o", "o", "o", "o", "", "", "u", "u", "u", "u", "y", "y", "", "-", "", "-", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "",  
 "", "-", "-" );
 
return str_replace($cherche, $remplace, $char);
}


et

Citation :


function SupPetitMot($chaine)
 {
  return preg_replace('#(?<=\-)\w{1,3}(?=\-)#i', '', $chaine);
 }


 
le pb et que lorsque j'utilise ces fonctions sur la chaine je n'ai pas le résultat souhaité:
 

Citation :


echo SupPetitMot(generation_url('l\'été sera chaud et les filles seront belles.')) . '<br />' ;
echo generation_url(SupPetitMot('l\'été sera chaud et les filles seront belles.')) . '<br />' ;


me retourne :
l--sera-chaud---filles-seront-belles
l-ete-sera-chaud-et-les-filles-seront-belles
 
dans le 1er cas j'ai un l qui traine et plusieurs tirets "-" entre les mots
dans le 2eme cas j'ai des mots de 3 lettres ou moins alors qu'il aurait du être supprimé.
 
pour le coups je sèche.
 
merci de votre aide.


Message édité par Profil supprimé le 09-08-2010 à 22:50:47
Reply

Marsh Posté le 09-08-2010 à 16:40:48   

Reply

Marsh Posté le 09-08-2010 à 21:12:02    

je dirais ca

Code :
  1. $str = 'l\'été sera chaud et les filles seront belles.';
  2. $str = htmlentities($str, ENT_NOQUOTES, 'UTF-8');    
  3. $str = preg_replace('/\&amp;([A-za-z])(?:acute|cedil|circ|grave|ring|tilde|uml)\;/', '$1', $str);
  4. $str = preg_replace('/\&amp;([A-za-z]{2})(?:lig)\;/', '$1', $str);
  5. $str = preg_replace('/\&amp;[^;]+\;/', '', $str);    
  6. $str = preg_replace('/\b\w{1,3}\b/', '', $str);
  7. $str = preg_replace('/\W+/', '-', $str);
  8. $str = trim($str, '-');
  9. echo $str;
  10. //sera-chaud-filles-seront-belles
 

tu peux aussi avec iconv pour les accents par contre ca depend avec quel lib est compiler (si c'est glibc c'est mort)

 
Code :
  1. $str = 'l\'été sera chaud et les filles seront belles.';
  2. $str = iconv('UTF-8', 'US-ASCII//IGNORE//TRANSLIT', $str);
  3. $str = preg_replace('/\b\w{1,3}\b/', '', $str);
  4. $str = preg_replace('/\W+/', '-', $str);
  5. $str = trim($str, '-');
  6. echo $str;


Message édité par stealth35 le 09-08-2010 à 21:18:13
Reply

Marsh Posté le 09-08-2010 à 22:51:24    

merci stealth35,
la 2éme proposition marche nickel.

Reply

Sujets relatifs:

Leave a Replay

Make sure you enter the(*)required information where indicate.HTML code is not allowed