Aller au contenu

Problème de caractères dans l'url rewriting


Sujets conseillés

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 ;)

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

Lien vers le commentaire
Partager sur d’autres sites

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));

}

Lien vers le commentaire
Partager sur d’autres sites

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.

Modifié par Ryo
Lien vers le commentaire
Partager sur d’autres sites

On peut aussi faire un code plus joli, et éminément plus pratique du genre :

	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.

Lien vers le commentaire
Partager sur d’autres sites

Merci à tous les deux pour vos réponses .

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

<?php

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



?>

Modifié par Dax
Lien vers le commentaire
Partager sur d’autres sites

Veuillez vous connecter pour commenter

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



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