Problèmes d'accents dans l'url

Nouveau WRInaute
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

J'ai trouvé ici et là 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));
}
 
WRInaute accro
Oulà ... les codes que tu as récupérés sont des fonctions PHP. Donc évidemment ils n'ont rien à faire dans ton .htaccess.
 
Nouveau WRInaute
nickargall a dit:
Oulà ... les codes que tu as récupérés sont des fonctions PHP. Donc évidemment ils n'ont rien à faire dans ton .htaccess.
Je suis d'accord mais je dois faire quoi de ces codes ? où dois-je les insérer ? est-ce que je dois créer un fichier php et y mettre le code dedans, si oui comment nommé ce fichier et où le placer ?

julienr a dit:
ou quand comment ?
Et bien çà se produit lorsque je visite par exemple la catégorie Accidentées:
-http://www.domain.com/dossier/cat_1_Accident_es.html

et quand je visite une annonce, le titre de celle-ci s'affiche comme çà:
-http://www.domain.com/dossier/ad_1_Annonce-de-d-monstration.html

J'aimerai bien pouvoir utiliser la deuxième solution citée plus haut,
 
WRInaute impliqué
tu utilises un CMS quelconque pour ton site ?
c'est la fonction qui génére tes liens qui pose problème
le .htaccess est correct
 
WRInaute accro
Aïe. Si tu confonds CMS et CSS et que tu ne sais pas trop quoi faire de ces codes en PHP, ça va être un peu long de t'expliquer, il faut reprendre les bases du PHP ...

Ceci dit si ce que tu indiques ne gène pas l'affichage des pages, la navigation, l'indexation des pages dans les moteurs, pas la peine de te prendre la tête. Laisse le tout en l'état.
 
Nouveau WRInaute
Désolé je suis un débutant mais j'apprends vite, je viens de regarder la définition de CMSet voici ce que j'ai trouvé:

Via Qu’est-ce qu’un CMS?, un CMS est “un ensemble de scripts accessibles, en général, par un navigateur, qui permettent de gérer le contenu d’un site WEB sans avoir de connaissances informatiques poussées dans la conception de sites WEB“.Contenu: la grande majorité des CMS stockent l’information dans des bases de données, ce qui permet de la réutiliser à plusieurs endroits. Peu être également stockée dans des fichiers XML.
Donc si j'ai bien compris tu me demandes si j'utilise un script déjà fait ou si c'est moi qui l'ai créé ?
C'est un script de petites annonces tout fait que l'on peut modifier comme bon nous semble.
 
WRInaute discret
les accents ne passent pas dans les URLs
C'est une norme.

C'est pour cela que les liens sont recodés automatiquement comme t'as pu le constater.

Maintenant en effet
au lieu de "é"=>"_"
tu préfères "é"=>"e"

Il ne faut pas intervenir sur le .htaccess qui est suffisament bien fait pour ne pas toucher. Par contre il donnent des infos interessasntes

Je remarque que seulement les chiffres sont importants
cat_12_blah-blah.html
qui devrait avoir le meme resultat que
cat_12_hihihih.html

il recupere le 12 une reference pour retrouver à quoi se référer très probablement ce qui veut dire que tu n'as pas besoin d'intervenir en amont.

En aval, il faut que tu recodes tous tes liens hypertextes (en HTML c'est <a href=" _____ " ....>
le ______ est à modifier en fonction

Tu les cherches dans les fichiers et en effet tu appliques le bout de code que tu as trouvé plus haut en particulier ta fonction suppaccents devrait etre bien


A+
Je te laisse bosser
car je ne vais pas faire le boulot à ta place faignasse !
 
Nouveau WRInaute
Merci à toi,
je ne suis pas un fainéant je suis juste dépassé par tous ces codes, je n'y connais pas grand chose à part faire du copier/coller

Donc en gros tu me dis de rectifier les fichiers où j'ai fais mes modifs, exemple de lignes modifiées (en bleu) et d'y insérer le code de la function suppaccents :

{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}

Peux tu me monter comment insérer le code dans cet exemple s'il te plait ?

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

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



?>
 
WRInaute discret
Tout est bien foutu dans les scripts que tu utilises !

Tu as simplement à remplacer

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

par

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

Bon courage ... et pour le "faignant" c plus une boutade
 
WRInaute accro
Juste une chose pour casser l'ambiance...


Si ton site est en ligne depuis longtemps et est bien référencé , je te conseille d'appliquer des redirections permanentes de tes anciennes URL (avec des - dans les adresses) vers les nouvelles, afin d'indiquer aux moteurs le changement. Sinon ils vont continuer à suivre les anciennes URL (qui logiquement fonctionnent toujours) et indexer les nouvelles, ce qui causera du contenu identique indexé en double (pas glop)

Un petit tutorial sur les redirections pour t'aider si besoin est.

Si ton site est tout frais et que son indexation est encore balbutiante, pas besoin de te prendre la tête.
 
Nouveau WRInaute
Merci pour ces infos, mais à part ma page principale je n'ai jamais trouvé dans google d'autres pages du site sauf quand on clique sur " relancer la recherche en incluant les pages ignorées. "
De plus c'est un site de petites annonces donc les pages corespondantes sont supprimées assez régulièrement, et je n'ai pas à la racine de mon site le htaccess dont on parle ici
La règle de redirection est indiquée dans un fichier .htaccess avec par exemple RedirectPermanent ou RewriteRule (dans ce cas il faut utiliser le code R=301)

Exemples : dans le fichier .htaccess situé à la racine du site (sur une seule ligne) :

RedirectPermanent /robotstats
-http://www.robotstats.com/ou bien (toujours sur une seule ligne) :

RewriteRule ^article-([0-9]*).php
archives-$1.htm [R=301]Pour le référencement : fonctionne très bien avec tous les moteurs
 
WRInaute impliqué
Tu créer un .htacess simplement en éditant avec un éditeur texte banal et nomme ton fichier .htacess cela suffit.

Pose le sous la racine pour une redirection ou dans un dossier éventuellement dont tu souhaite la redirection.

:wink:
 
Nouveau WRInaute
Je reviens dessus car le message de nickargall m'a mis le doute.
Mon script n'est pas placé à la base dans mon hébergement, mais dans un dossier, voici ce que je vois dans FileZilla /dossier/ et c'est la dedans que j'ai placé le fichier htaccess pour le rewriting.
Est-ce que je peux y inclure la ligne
Code:
RedirectPermanent /robotstats 
http://www.robotstats.com/
ou bien je dois créer un autre htaccess et si oui où dois-je le placer? Dois-je aussi indiquer dans cette ligne le nom du dossier ex: www.robotstats.com/dossier ?

J'ai aussi trouvé dans un vieux post une autre solution mais j'ai rien compris https://www.webrankinfo.com/forum/highl ... n+durl.htm

dans mon cas je devrai donc insérer ce code dans ma page index.php ?
if( preg_match("/(index.php|\/?)/i", $_SERVER['REQUEST_URI']) )
{ require('modifier.sanitize.php'); }

voici le code de index.php
Code:
<?
$lSearchEngineArray=array("Google", "Fast", "Slurp", "Ink", "Atomz", "Scooter", "Crawler", "MSNbot", "Poodle", "Genius"); 
$lIsSearchE=0; 
foreach($lSearchEngineArray as $key => $val)  
	if(strstr($_SERVER['HTTP_USER_AGENT'], $val)) 
		$lIsSearchE++; 
if($lIsSearchE==0) 
	session_start(); 
	
require("admin/inc.php");
$catname = "";
$catid = getParamInt("catid","");
if ($catid) {
	$sql="select cat_name,cat_tpl";
	
	
	if (!empty($_SESSION["la"]) AND $set_multilang_cat)
	{
		$lang_cat = "lang_" . $_SESSION["la"];
		$sql.=",$lang_cat";
	}
	$sql.=" from $cat_tbl where cat_id = $catid";
	$row=mysql_fetch_array(q($sql));
	
	$catname = $row["cat_name"];
  	if (!empty($row["$lang_cat"]))
  		$catname=$row["$lang_cat"];
	 if (!empty($row["cat_tpl"]))
  		$cat_tpl=$row["cat_tpl"];
  	
  	$pagename= $sitename . " - " . $catname;
		
}
else
	$fp = 1;

require("header_inc.php");
$tplIndex=new TplLoad;
$tplIndex->assign("catname",$catname);
$val_string = "";


// Security check
if (file_exists("install.php"))
{
	print "<p><center><b><font color='red'>SECURITY WARNING</font></b><br />You have not followed our instructions to 	delete install.php
	immediately after install. Leaving this file here is a <u>major</u> security problem and opens your site up
	to wild hacking.</center></p>";	
}
   
// If we are on the frontpage, write out welcome message along with flags
$tplIndex->assign("index_catid",$catid);
$tplIndex->assign("banner",$lBanner);
$tplIndex->assign("isFrontpage","$fp");
if ($fp && !$set_latest_fp)
	$tplIndex->assign("HideLastListFp","1");
$tplIndex->assign("index_nameofsite",$name_of_site);
$tplIndex->assign("index_welcome",formatString(WELCOME_MESSAGE, array("$name_of_site")));
$tplIndex->assign("index_welcome_1",formatString(LA_WELCOME_1, array("$name_of_site")));
$tplIndex->assign("index_welcome_2",formatString(LA_WELCOME_2, array("$name_of_site")));
$tplIndex->assign("index_welcome_91",formatString(LA_WELCOME_LOGGED_1, array($_SESSION['user_name'])));
$tplIndex->assign("index_welcome_92",formatString(LA_WELCOME_LOGGED_2, array($_SESSION['user_name'])));
$tplIndex->assign("member",$_SESSION["valid_user"]);

if ($set_special)
{
	$limit=$set_premium_limit;
	$sql_str = "select ad_title, ad_id from $ads_tbl where ad_is_premium=1 ";
	if ($catid AND $set_special_categories)
		$sql_str.=" AND ad_cat_id=$catid";
	if ($set_special_only_frontpage AND $catid)
		$sql_str.=" AND 2<1";
		
	$sql_str.=" $val_string order by ad_id desc limit $limit";
	$res_sp = q($sql_str);
	$sp_i=0;
	while ($row_sp=mysql_fetch_array($res_sp))
	{
		$s_title = $row_sp["ad_title"];	
		$s_id = $row_sp["ad_id"];	
		
		$lSpecialAds[$sp_i]["s_title"]=dotString($s_title,$set_special_string_length);
		$lSpecialAds[$sp_i]["s_id"]=$s_id;
		
		$sp_i++;
	}
	$tplIndex->assign("special_list",$lSpecialAds);	
	
	if ($sp_i==0)
		$tplIndex->assign("size","100");	
	else
		$tplIndex->assign("size","70");	
}
else 
{	
	$tplIndex->assign("size","100");		
}

$tplIndex->display("index.tpl");
include_once("footer_inc.php");
?>
 
WRInaute accro
Arrête tout, tu fais fausse route ! Le code que tu as lu :
Code:
RedirectPermanent /robotstats
http://www.robotstats.com/
est un exemple concernant un dossier qui s'appellerait Robotstats . Rien à voir avec ton site.

Je te donne un exemple :
- on a sur un site une page qui s'appelle "www.example.com/page.html"
- un jour, on décide de la placer dans un répertoire, elle change donc d'adresse :
"www.example.com/repertoire/page.html"

Pour indiquer aux moteurs qu'elle a déménagé, on crée donc un fichier .htaccess qu'on place à la racine du site.
Dans ce fichier, on écrit :
Code:
RewriteEngine On
Redirect permanent /page.html /repertoire/page.html

mais il te faudra un peu de lecture sur la redirection permanente par htaccess pour tout rediriger ... Si tu n'as que quelques pages indexées, tu peux t'en passer ...
 
Nouveau WRInaute
J'ai lu que si j'ajoutais les trois dernières lignes de code au bas de mon htaccess, cela résoudrait le petit problème qui est que l'on peut accéder à la page d'acceuil de mon site en tapant directement -http://www.domaine.com/dossier et -http://www.domaine.com/dossier/index.php . Est-ce bien exact ?
Code:
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

Options +FollowSymLinks 
RewriteCond %{THE_REQUEST} ^.*/index.php 
RewriteRule ^(.*)index.php$ http://www.domaine.com/dossier/$1 [R=301,L]

Si ton site est en ligne depuis longtemps et est bien référencé , je te conseille d'appliquer des redirections permanentes de tes anciennes URL (avec des - dans les adresses) vers les nouvelles, afin d'indiquer aux moteurs le changement. Sinon ils vont continuer à suivre les anciennes URL (qui logiquement fonctionnent toujours) et indexer les nouvelles, ce qui causera du contenu identique indexé en double (pas glop)
Si je crée un htaccess avec ceci dedans et que je l'installe dans le dossier qui contient mon script, cela va-t-il bien indiquer aux moteurs les nouvelles url ?
Code:
RewriteCond %{HTTP_HOST} !^www\.domaine\.com\dossier
RewriteRule (.*) http://www.domaine.com/dossier/$1 [R=301,L]
 
WRInaute accro
Si tu mets texto les lignes de code que tu indiques, ça ne fera rien, il faut que tu les adapte à TON nom de domaine et TON nom de répertoire
 
Nouveau WRInaute
Salut nickargall,
oui j'ai bien compris çà , c'était pour l'exemple. Le seul truc qui m'inquiète c'est les mots tels que THE_REQUEST et HTTP_HOST, il ne faut pas les changer ceux-là ? Sinon tu penses que c'est OK cette fois , il n'y a pas d'erreur ?
 
WRInaute accro
Je ne suis pas un expert en rewriting, et j'attaque depuis peu les RewriteCond donc voilà quoi .. je vais pas m'engager sur la validité des règles que tu indiques.
Mais se prémunir d'un doublon entre un /dossier/ et un /dossier/index.php, c'est pas crucial pour le référencement d'un site, ptet pour son pagerank mais bon pour ce que ça change, un bon Pagerank ...
 
Discussions similaires
Haut