URL-Rewriting et caractères spéciaux

Discussion dans 'URL Rewriting et .htaccess' créé par DomZ, 3 Avril 2006.

  1. DomZ
    DomZ WRInaute discret
    Inscrit:
    11 Mars 2006
    Messages:
    71
    J'aime reçus:
    0
    bonjour,

    Actuellement j'ai déjà de l'url-rewriting mais pas terrible, en effet je génère des liens avec juste un id (exemple: 456456464.html)

    je souhaiterais faire de l'url rewriting avec du texte, mais j'aimerais savoir comment alors ne prendre que les caractères pris en charge dans les urls.

    enlever ("'\ /*&$#...), pour les accents je sais comment faire.

    Merci de votre aide
     
  2. chantra
    chantra WRInaute discret
    Inscrit:
    27 Juin 2005
    Messages:
    225
    J'aime reçus:
    0
    un str_replace bien placé :)
    str_replace(array('\'','"','#'....),array('','',''...),$mystr)
     
  3. DomZ
    DomZ WRInaute discret
    Inscrit:
    11 Mars 2006
    Messages:
    71
    J'aime reçus:
    0
    Certe mais encore faut-il savoir tous les caractères à remplacer ...

    Je cherche plutot une méthode qui me garde tous les caractères ascii.

    Merci quand meme.
     
  4. pipologue
    pipologue WRInaute occasionnel
    Inscrit:
    27 Mai 2004
    Messages:
    477
    J'aime reçus:
    0
    $var = ereg_replace('[^[:alpha:]]','',$var) ;
     
  5. SuperPJ
    SuperPJ WRInaute occasionnel
    Inscrit:
    15 Janvier 2005
    Messages:
    413
    J'aime reçus:
    0
    Salut Domz, voici pour toi une fonction qui pourrait faire l'affaire ;)

    Code:
    // Le texte à placer dans l'url
    $texte = " l'url va être : \"rewritée\" ";
    
    // L'id correspondant à l'enregistrement (afin que chaque url générée soit unique)
    $id = 456456464;
    
    // L'extension du fichier généré par l'url-rewriting
    $extension = ".html";
    
    // Le caractère utilisé pour séparer les mots dans l'url
    $sep_mots = "-";
    
    // Le nombre maximum de caractères dans l'url rewritée (id non-comprise)
    $max_caracteres = 50;
    
    /*___________________________________________________________________________________*/
    
    // Appel de la fonction
    echo rewriting( $texte, $id, $extension, $sep_mots, $max_caracteres );
    
    // Résultat affiché
    // l-url-va-etre-rewritee-456456464.html
    
    /*___________________________________________________________________________________*/
    
    
    // La fonction en question
    function rewriting( $texte, $id, $extension, $sep_mots, $max_caracteres )
    {
    	// Définition des caractères accentués
    	$car_speciaux = array( 'À', 'Á', 'Â', 'Ã', 'Ä', 'Å', 'Æ', 'à', 'á', 'â', 'ã', 'ä', 'å', 'æ', 'È', 'É', 'Ê', 'Ë', 'è', 'é', 'ê', 'ë', 'Ì', 'Í', 'Î', 'Ï', 'ì', 'í', 'î', 'ï', 'Ò', 'Ó', 'Ô', 'Õ', 'Ö', 'Ø', 'ò', 'ó', 'ô', 'õ', 'ö', 'ø', 'Ù', 'Ú', 'Û', 'Ü', 'ù', 'ú', 'û', 'ü', 'ß', 'Ç', 'ç', 'Ð', 'ð', 'Ñ', 'ñ', 'Þ', 'þ', 'Ý' );
    	// ... et de leurs "équivalents" non-accentués
    	$car_normaux  = array( 'A', 'A', 'A', 'A', 'A', 'A', 'A', 'a', 'a', 'a', 'a', 'a', 'a', 'a', 'E', 'E', 'E', 'E', 'e', 'e', 'e', 'e', 'I', 'I', 'I', 'I', 'i', 'i', 'i', 'i', 'O', 'O', 'O', 'O', 'O', 'O', 'o', 'o', 'o', 'o', 'o', 'o', 'U', 'U', 'U', 'U', 'u', 'u', 'u', 'u', 'B', 'C', 'c', 'D', 'd', 'N', 'n', 'P', 'p', 'Y' );
    	
    	// On commence par supprimer les accents
    	$texte = str_replace($car_speciaux, $car_normaux, $texte);
    	
    	// On remplace les caractères non-alphanumériques par le séparateur $sep_mots
    	$texte = preg_replace( "/[^A-Za-z0-9]+/", $sep_mots, $texte );
    	
    	// On supprime le séparateur s'il se trouve en début ou fin de chaîne
    	$texte = trim( $texte, $sep_mots );
    	
    	// On limite la chaine à $max_caracteres caractères (ici 50 caractères)
    	$texte = substr( $texte, 0, $max_caracteres );
    	
    	// On convertit le tout en minuscules
    	$texte = strtolower( $texte );
    	
    	// On ajoute l'id à la fin pour avoir une url unique et on ajoute l'extension (ici .html)
    	$texte = "$texte$sep_mots$id$extension";
    	
    	// On retourne le résultat
    	return ( $texte );
    };
    
     
  6. zimounet
    zimounet WRInaute passionné
    Inscrit:
    8 Novembre 2004
    Messages:
    1 374
    J'aime reçus:
    0
    attention avec la fonction de superpj et les entités html, enfin attention aux entités html quand on fais ça, si on gere pas ça foire tout...

    de plus superpj, il manque la prise en compte de l'€uro dans ta fonction ;)
     
  7. SuperPJ
    SuperPJ WRInaute occasionnel
    Inscrit:
    15 Janvier 2005
    Messages:
    413
    J'aime reçus:
    0
    hmmm ... je n'ai pas compris ta remarque sur les entités html :? en quoi genent-elles dans la mesure ou tous les caractères non alphanumériques (donc les </> des tags html) sont supprimés dans la fonction ? ;)

    Code:
    // On remplace les caractères non-alphanumériques par le séparateur $sep_mots 
    $texte = preg_replace( "/[^A-Za-z0-9]+/", $sep_mots, $texte );
    EDIT : ok j'ai compris tu voulais dire quand on a $texte qui vaut par exemple "<strong>test</strong>" ne pas se retrouver avec un fichier du genre "strong-test-strong-1.html" :p c'est vrai que je n'avais pas pensé à cela car en général on utilise pour le rewriting un texte extrait d'une base, qui n'a pas encore été mis en forme html. Mais c'est vrai qu'il faut penser à ajouter une fonction pour enlever si nécessaire les tags html :p

    Bref mettre ça juste avant la suppression des caractères non-alphan ;) :
    Code:
    $texte = strip_tags( $texte );
    Bien vu jeune codeur talentueux :D
     
  8. DomZ
    DomZ WRInaute discret
    Inscrit:
    11 Mars 2006
    Messages:
    71
    J'aime reçus:
    0
    Merci bcp.

    En effet les tags ne sont pas un probleme car à l'enregistrement je fais un strip_tags donc pas d'HTML sur ce champ en base.

    Merci à vous.

    Sinon j'avais fait ces fonctions :

    Code:
    function fctConvertToLink($str) {
    	$ret = fctRemoveAccents($str);
    	$ret = mb_strtolower($str);
    	$ret = str_replace(" ","-",$ret);
    	$ret = preg_replace("/-+/","-",$ret);
    	$ret = preg_replace("/[^a-z0-9'\"-]/i","",$ret);
    	$ret = trim($ret,"-");
    	return $ret;
    }
    
    function fctRemoveAccents($str = '') {
    	if(!(is_string($str))) return '';
    	$ret = strtr($str, "ÀÁÂÃÄÅÇÈÉÊËÌÍÎÏÒÓÔÕÖÙÚÛÜÝàáâãäåçèéêëìíîïðòóôõöùúûüýÿ", "AAAAAACEEEEIIIIOOOOOUUUUYaaaaaaceeeeiiiioooooouuuuyy");
    	return $ret;
    }
    
     
Chargement...
Similar Threads - Rewriting caractères spéciaux Forum Date
URL rewriting et caracteres speciaux dans l'URL URL Rewriting et .htaccess 26 Août 2010
URL rewriting et caractères accentués URL Rewriting et .htaccess 7 Avril 2011
rewriting avec une variable de chaîne de caractères URL Rewriting et .htaccess 13 Novembre 2009
Caractères bizarres avec URL rewriting URL Rewriting et .htaccess 4 Juillet 2005
caracteres en rewriting URL Rewriting et .htaccess 24 Mai 2005
PB url rewriting avce des chaines de caractéres URL Rewriting et .htaccess 21 Octobre 2004
Certains caractères ne passent pas dans l'url rewriting? URL Rewriting et .htaccess 18 Août 2004
Paramètres urls & urlrewriting => alphabétiques ou codés ? Problèmes de référencement spécifiques à vos sites 30 Mars 2022
Problème url rewriting et redirection URL Rewriting et .htaccess 4 Février 2022
URL rewriting d'images URL Rewriting et .htaccess 22 Janvier 2022
petit soucis url rewriting URL Rewriting et .htaccess 17 Janvier 2022
url rewriting ne fonctionne pas chez moi URL Rewriting et .htaccess 4 Août 2021
URL rewriting et REGEX bonnes pratiques Développement d'un site Web ou d'une appli mobile 9 Septembre 2020
supprimer /index.html sans url rewriting, possible ? URL Rewriting et .htaccess 13 Novembre 2019
Je bloque sur le rewriting des URL contenant un ? URL Rewriting et .htaccess 3 Septembre 2019
récupération du get après rewriting URL Rewriting et .htaccess 21 Juin 2019
Ralentissement url rewriting URL Rewriting et .htaccess 1 Mai 2019
URL Rewriting Débuter en référencement 17 Avril 2019
Conflit de redirection 301 et Urlrewriting Netlinking, backlinks, liens et redirections 20 Février 2019
URL REWRITING et redirection 301 URL Rewriting et .htaccess 24 Janvier 2019