Version complète: sur le forum Webmaster Hub : Problème de caractères dans l'url rewriting
Webmaster Hub > Création et exploitation de Sites Internet > Les langages du Net > Fichier .htaccess et réécriture d'URLs
Dax
Bonjour à tous,
voilà j'ai un souci avec certains caractères tels que le é, è, à , ils sont automatiquement remplacés par un - et donc çà coupe les mots dans mes urls. Quelqu'un pourrait-il me dire comment je peux faire pour qu'ils soient remplacés par des e et des a sans accents ? Merci d'avance wink.gif
Voici mon htaccess :

RewriteEngine On
RewriteRule ^ad_([0-9]+)_(.*).html detail.php?id=$1
RewriteRule ^cat_([0-9]+)_(.*).html index.php?catid=$1
RewriteRule ^user_([0-9]+)_(.*).html user_info.php?user_id=$1
RewriteRule ^ratemember_([0-9]+)_(.*).html rate_member.php?user_id=$1
RewriteRule ^contact_([0-9]+)_([0-9]+)_(.*).html detail.php?id=$1&user_id=$2&contact=1
RewriteRule ^rate_([0-9]+).html rate.php?id=$1
RewriteRule ^largepicture_([0-9]+).html large_picture.php?id=$1
RewriteRule ^tellafriend_([0-9]+).html detail.php?id=$1&tellafriend=1
RewriteRule ^print_([0-9]+).html detail.php?id=$1&print=1
RewriteRule ^removefav_([0-9]+).html fav_popup.php?remove_fav=$1
RewriteRule ^addfav_([0-9]+).html fav_popup.php?add_fav=$1
RewriteRule ^trm_(.*).html info.php?what=terms
RewriteRule ^ab_(.*).html info.php?what=aboutus
RewriteRule ^adv_(.*).html info.php?what=advertise
RewriteRule ^hlp_(.*).html info.php?what=help
RewriteRule ^rss_([0-9]+).html detail.php?id=$1
Dax
J'ai trouvé dans divers forums ces fonctions mais je ne sais pas où les placer, directement dans le htaccess cause une erreur 500
1ère solution:

$accents = "ÀÁÂÃÄÅàáâãäåÒÓÔÕÖØòóôõöøÈÉÊËèéêëÇçÌÍÎÏìíîïÙÚÛÜùúûüÿÑñ";
$ssaccents = "AAAAAAaaaaaaOOOOOOooooooEEEEeeeeCcIIIIiiiiUUUUuuuuyNn";
$titre_url = strtr($titre,$accents,$ssaccents);
$in = array(' ', '?', '!', '.', ',', ':', "'", '&', '(', ')');
$out = array('-', '', '', '', '', '', '-', 'et', '', '');
$titre_url = str_replace($in, $out, $titre_url);

2ème solution:

function suppaccents($mot){
$accents = "ÀÁÂÃÄÅàáâãäåÒÓÔÕÖØòóôõöøÈÉÊËèéêëÇçÌÍÎÏìíîïÙÚÛÜùúûüÿÑñ";
$ssaccents = "AAAAAAaaaaaaOOOOOOooooooEEEEeeeeCcIIIIiiiiUUUUuuuuyNn";
return(strtr($mot,$accents,$ssaccents));
}
Ryo
Bonjour,

tu peux utiliser l'un des deux code oui (le 1er me semble plus complet).

Pour l'utiliser, il faut que tu le place dans le code de tes pages php là ou tes url sont créées.
captain_torche
On peut aussi faire un code plus joli, et éminément plus pratique du genre :
CODE
    function enleve_accents($chaine) {
        $reg = '/&(.)(acute|grave|circ|uml|cedil|ring|tilde|slash);/';
        return preg_replace($reg, '\1', htmlentities($chaine));
    }


Dans le principe :
- le htmlentities() retournera les équivalents HTML des lettres eccentuées (é pour é, À pour À ...)
- on isole la lettre ciblée avec l'expression régulière, qui part du principe qu'une lettre accentuée est forcément de la forme & + lettre + nom de l'accent +;
- on retourne le texte original débarassé de ses accents

L'avantage est qu'il fonctionnera sur tout type de lettre accentuée non prévue dans la liste d'origine.
Dax
Merci à tous les deux pour vos réponses .

CITATION
il faut que tu le place dans le code de tes pages php là ou tes url sont créées.

Est-ce que c'est dans un fichier du genre functions.php ou bien dans les fichiers où j'ai fais mes modifs, exemple de lignes modifiées (en gras):

{if $category.SUBCATLIST}
{foreach name=sub item=sub from=$category.SUBCATLIST}
<a href="cat_{$sub.CATID}_{$sub.CATNAME|sanitize}.html" title="{$sub.CATNAME}">{$sub.CATNAME}</a>
<small class="littleGray">{$sub.NUM}</small>{if !$smarty.foreach.sub.last},{/if}
{/foreach}
{elseif $category.CATDESCRIPTION}
<small>{$category.CATDESCRIPTION}</small>
{/if}

Voici le code du fichier modifier.sanitise.php que j'ai aussi ajouter à mon script pour faire fonctionner le rewriting, est-ce là dedans qu'il faut mettre le code ? :
CODE
<?php

function smarty_modifier_sanitize($string, $spacify_char = ' ')
{
return preg_replace('!\W!','-',$string);
}



?>
Ryo
Oui c'est bien là a_thumbsup_20.gif
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.