Jump to content

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


 Share

Recommended Posts

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

Link to comment
Share on other 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));

}

Link to comment
Share on other 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.

Edited by Ryo
Link to comment
Share on other 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.

Link to comment
Share on other 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);
}



?>

Edited by Dax
Link to comment
Share on other sites

Create an account or sign in to comment

You need to be a member in order to leave a comment

Create an account

Sign up for a new account in our community. It's easy!

Register a new account

Sign in

Already have an account? Sign in here.

Sign In Now
 Share

×
×
  • Create New...