Url rewrite et caractére spéciaux
11 messages • Page 1 sur 1
Consultez la formation URL Rewriting et sites dynamiques de WebRankInfo / Ranking Metrics
Url rewrite et caractére spéciaux
Bonjour tout le monde,
j'espére que les fetes ont été bonne pour tout le monde
je suis nouveau sur le forum, mais je sens que je vais devenir un habitué
voila donc ma question =>
je suis en train d'effectuer de l'url rewriting sur mon site internet, tout fonctione exepté quelques petites choses.
j'utilise comme séparateur le -
et voici mes problèmes =>
* si un article est appelé alors qu'il contient un - dans son nom, IE m'affiche impossible d'afficher la page
* ensuite je n'arrive pas a supprimer les caractéres spéciaux comme ()'&%$ etc... ce qui me fait des %2B et autres dans l'url sur certain produits.
Donc comment puis je remedier a ce problème.
voici mon .htaccess en test
ensuite voici le contenu de mon fichier rewrite.php
et le fichier effectuant l'affichage html_output.php
la fonction qui j'utilise pour supprimer les caractéres accentués et celle ci
Je travail depuis plusieurs jour sur ce problème mais impossible de trouver une solution. Ce qui est normal car je ne suis pas un pro du php
Donc j'attend vos avis, etc... tout ce qui puisse me faire avancé dans mon shmilblic... (excusé moi pour l'orthographe).
Merci d'avance et bonne fete de fin d'année a tous.
++
j'espére que les fetes ont été bonne pour tout le monde
je suis nouveau sur le forum, mais je sens que je vais devenir un habitué
voila donc ma question =>
je suis en train d'effectuer de l'url rewriting sur mon site internet, tout fonctione exepté quelques petites choses.
j'utilise comme séparateur le -
et voici mes problèmes =>
* si un article est appelé alors qu'il contient un - dans son nom, IE m'affiche impossible d'afficher la page
* ensuite je n'arrive pas a supprimer les caractéres spéciaux comme ()'&%$ etc... ce qui me fait des %2B et autres dans l'url sur certain produits.
Donc comment puis je remedier a ce problème.
voici mon .htaccess en test
- Code: Tout sélectionner
Options +FollowSymLinks
RewriteEngine on
RewriteBase /test
RewriteRule admin - [L]
RewriteRule test$ /test/index.php [R,L]
RewriteRule test/$ /test/index.php [R,L]
RewriteCond %{REQUEST_URI} !-d
RewriteCond %{REQUEST_URI} !^/$
RewriteRule !\.(gif|php|css|js|jpg)$ /test/rewrite.php
RewriteRule .* - [F]
ensuite voici le contenu de mon fichier rewrite.php
- Code: Tout sélectionner
<?php
include('includes/application_top.php');
if ($REQUEST_URI == '/catalog/') {
tep_redirect(tep_href_link(FILENAME_DEFAULT));
}
if ($REQUEST_TYPE == 'SSL') {
$comparison_array = explode('/', HTTPS_SERVER . DIR_WS_HTTPS_CATALOG, 4);
} else {
$comparison_array = explode('/', HTTP_SERVER . DIR_WS_HTTP_CATALOG, 4);
}
$comparison = $comparison_array[3];
$parts = explode('?', str_replace($comparison, '', $REQUEST_URI), 2);
$list = explode('/', preg_replace(array('#^/#', '#/$#'), '', $parts[0]));
if (sizeof($parts) == 2) {
$parameters = explode('&', $parts[1]);
foreach ($parameters as $pair) {
$pieces = explode('=', $pair);
$HTTP_GET_VARS[$pieces[0]] = $pieces[1];
}
}
$current_category_id = 0;
$cPath_array = array();
$count = 0;
foreach ($list as $piece_encoded) {
$count++;
$piece = urldecode(preg_replace(array('/[-]/', '/%20/'), array(' ', '%2F'),$piece_encoded));
if ($piece == 'catalog') {
continue;
}
$query_string = "select cd.categories_id from categories_description cd, categories c where cd.categories_id=c.categories_id and cd.categories_name='" . tep_db_input($piece) . "' and c.parent_id='" . (int)$current_category_id . "'";
$category_query = tep_db_query("select cd.categories_id from categories_description cd, categories c where cd.categories_id=c.categories_id and cd.categories_name like '" . tep_db_input($piece) . "' and c.parent_id='" . (int)$current_category_id . "'");
if ($category_array = tep_db_fetch_array($category_query)) {
$cPath_array[]= $category_array['categories_id'];
$breadcrumb->add(mrpropre($piece), tep_href_link(FILENAME_DEFAULT, 'cPath=' . implode('_', $cPath_array)));
$current_category_id = $category_array['categories_id'];
} else {
if ($current_category_id != '0') {
$parent_where_string = " and p2c.categories_id='" . (int)$current_category_id . "'";
} else {
$parent_where_string = '';
}
$product_query = tep_db_query("select pd.products_id from products_description pd, products_to_categories p2c, products p where p.products_id = pd.products_id and p.products_status = '1' and pd.products_id=p2c.products_id and pd.products_name='" . tep_db_input($piece) . "'" . $parent_where_string);
if ($product_array = tep_db_fetch_array($product_query)) {
if (sizeof($cPath_array) < 1) {
$cPath = tep_get_product_path($product_array['products_id']);
$cPath_array = explode('_', $cPath);
for ($i=0, $n=sizeof($cPath_array); $i<$n; $i++) {
$categories_query = tep_db_query("select categories_name from " . TABLE_CATEGORIES_DESCRIPTION . " where categories_id = '" . (int)$cPath_array[$i] . "' and language_id = '" . (int)$languages_id . "'");
if (tep_db_num_rows($categories_query) > 0) {
$categories = tep_db_fetch_array($categories_query); $breadcrumb->add($categories['categories_name'], tep_href_link(FILENAME_DEFAULT, 'cPath=' . implode('_', array_slice($cPath_array, 0, ($i+1)))));
} else {
break;
}
}
} else {
$cPath = implode('_', $cPath_array);
}
$breadcrumb->add(mrpropre($piece), tep_href_link(FILENAME_PRODUCT_INFO, 'cPath=' . $cPath . '&products_id=' . $product_array['products_id']));
$HTTP_GET_VARS['products_id'] = $product_array['products_id'];
$PHP_SELF_REWRITE = mrpropre(dirname($PHP_SELF)) . '/' . FILENAME_PRODUCT_INFO;
$PHP_SELF = mrpropre($PHP_SELF_REWRITE);
include(FILENAME_PRODUCT_INFO);
exit();
} else {
$manufacturer_query = tep_db_query("select manufacturers_id from manufacturers where manufacturers_name='" . tep_db_input($piece) . "'");
if ($manufacturer_array = tep_db_fetch_array($manufacturer_query)) {
$breadcrumb->add(mrpropre($piece), tep_href_link(FILENAME_DEFAULT, 'cPath=' . implode('_', $cPath_array) . 'manufacturers_id=' . (int)$manufacturers_array['manufacturers_id']));
$HTTP_GET_VARS['manufacturers_id'] = $manufacturer_array['manufacturers_id'];
if ($count == sizeof($list)) {
$HTTP_GET_VARS['filter_id'] = $current_category_id;
$PHP_SELF_REWRITE = mrpropre(dirname($PHP_SELF)) . '/' . FILENAME_DEFAULT;
$PHP_SELF = mrpropre($PHP_SELF_REWRITE);
$cPath = implode('_', $cPath_array);
$HTTP_GET_VARS['cPath'] = $cPath;
include(FILENAME_DEFAULT);
exit();
}
} else {
reset($list);
/* tep_redirect(tep_href_link(FILENAME_ADVANCED_SEARCH_RESULT, 'keywords=' . implode('+', $list))); */
}
}
}
}
$cPath = implode('_', $cPath_array);
$HTTP_GET_VARS['cPath'] = $cPath;
$PHP_SELF_REWRITE = mrpropre(dirname($PHP_SELF)) . '/' . FILENAME_DEFAULT;
$PHP_SELF = $PHP_SELF_REWRITE;
include(FILENAME_DEFAULT);
?>
et le fichier effectuant l'affichage html_output.php
- Code: Tout sélectionner
<?php
// The HTML href link wrapper function
function tep_href_link($page = '', $parameters = '', $connection = 'NONSSL', $add_session_id = true, $search_engine_safe = true) {
global $request_type, $session_started, $SID;
$separator = '?';
if (tep_not_null($parameters)) {
$product_name = '';
switch ($page) {
case FILENAME_PRODUCT_INFO:
case FILENAME_DEFAULT:
$manufacturer_name = '';
$product_name = '';
$new_parameter_list = array();
$cPath_list = array();
foreach (explode('&', $parameters) as $pair) {
global $languages_id;
$pair_array = explode('=', $pair);
switch ($pair_array[0]) {
case 'action':
$link .= $page . '?' . tep_output_string($parameters);
$separator = '&';
break 3;
case 'cPath':
$parent_id = 0;
foreach (explode('_', $pair_array[1]) as $category_id) {
$category_name_query = tep_db_query("select cd.categories_name from categories_description cd, categories c where cd.categories_id=c.categories_id and cd.categories_id='" . (int)$category_id . "' and cd.language_id='" . (int)$languages_id . "' and c.parent_id='" . (int)$parent_id . "'");
if ($category_name_array = tep_db_fetch_array($category_name_query)) {
$cPath_list[]= urlencode(strtolower(mrpropre($category_name_array['categories_name'])));
$parent_id = $category_id;
}
}
break;
case 'products_id':
$product_name_query = tep_db_query("select products_name from products_description where products_id='" . (int)$pair_array[1] . "' and language_id='" . (int)$languages_id . "'");
if ($product_name_array = tep_db_fetch_array($product_name_query)) {
$product_name = strtolower(mrpropre($product_name_array['products_name']));
}
break;
case 'manufacturers_id':
$manufacturer_name_query = tep_db_query("select manufacturers_name from " . TABLE_MANUFACTURERS . " where manufacturers_id='" . (int)$pair_array[1] . "'");
if ($manufacturer_array = tep_db_fetch_array($manufacturer_name_query)) {
$manufacturer_name = strtolower(mrpropre($manufacturer_array['manufacturers_name']));
}
break;
case '':
break;
default:
if (tep_not_null($pair)) $new_parameter_list[]= $pair;
}
}
if (tep_not_null($manufacturer_name)) {
$cPath_list[]= urlencode($manufacturer_name);
}
if (tep_not_null($product_name)) {
$cPath_list[]= urlencode($product_name);
}
$separator = '?';
$link .= preg_replace(array('/%2F/', '/[+]/'), array('%20', '-'), implode('/', $cPath_list));
if (tep_not_null($new_parameter_list)) {
$link .= $separator . implode('&', $new_parameter_list);
$separator = '&';
}
break;
default:
$link .= $page . '?' . tep_output_string($parameters);
$separator = '&';
}
} else {
$link .= $page;
$separator = '?';
}
if ( (SEARCH_ENGINE_FRIENDLY_URLS == 'true') && ($search_engine_safe == true) ) {
while (strstr($link, '&&')) $link = str_replace('&&', '&', $link);
$link = str_replace('?', '/', $link);
$link = str_replace('&', '/', $link);
$link = str_replace('=', '/', $link);
$separator = '?';
}
if (isset($_sid)) {
$link .= $separator . $_sid;
}
return $link;
}
?>
la fonction qui j'utilise pour supprimer les caractéres accentués et celle ci
- Code: Tout sélectionner
function mrpropre($chaine){
$tofind = "ÀÁÂÃÄÅàáâãäåÒÓÔÕÖØòóôõöøÈÉÊËèéêëÇçÌÍÎÏìíîïÙÚÛÜùúûüÿÑñ";
$replac = "AAAAAAaaaaaaOOOOOOooooooEEEEeeeeCcIIIIiiiiUUUUuuuuyNn";
return(strtr($chaine,$tofind,$replac));
}
Je travail depuis plusieurs jour sur ce problème mais impossible de trouver une solution. Ce qui est normal car je ne suis pas un pro du php
Donc j'attend vos avis, etc... tout ce qui puisse me faire avancé dans mon shmilblic... (excusé moi pour l'orthographe).
Merci d'avance et bonne fete de fin d'année a tous.
++
Dernière édition par fab27 le Lun Jan 03, 2005 0:38, édité 2 fois.
function mrpropre! Joli
Sinon, pour supprimer les caractères spéciaux, fait une regex à partir de [^\w\-] à la fin de la fonction Mr Propre, ca supprimera tous les caractères différents de a-z, A-Z, 0-9, _ et -
ereg_replace("[^\w\-]", "", $string)
Sinon, pour supprimer les caractères spéciaux, fait une regex à partir de [^\w\-] à la fin de la fonction Mr Propre, ca supprimera tous les caractères différents de a-z, A-Z, 0-9, _ et -
ereg_replace("[^\w\-]", "", $string)
Ok mais je fais comment
Sinon, pour supprimer les caractères spéciaux, fait une regex à partir de [^\w\-] à la fin de la fonction Mr Propre, ca supprimera tous les caractères différents de a-z, A-Z, 0-9, _ et -
ereg_replace("[^\w\-]", "", $string)
Merci pour cette réponse ultra rapide
ok je suis d'accord avec toi
++
Tu places ca à la fin de ta fonction Mr Propre, et ca règle le problème des caractères spéciaux... Par contre, je n'ai pas vraiment saisi l'autre problème...
Donne-nous des exemples histoire de clarifier les choses... Je connais peu de monde qui va s'amuser à lire tout ton code...
Donne-nous des exemples histoire de clarifier les choses... Je connais peu de monde qui va s'amuser à lire tout ton code...
Bienvenue dans ce forum,
Effectivement ton post est comment dire... bcp trop long.
Dans ce genre de cas, essaye d'isoler le pb, ou d'expliquer un minimum avant de balancer un code comme ca.
Mais c'est pas grave, l'essentiel et de trouver son bonheur ici
Effectivement ton post est comment dire... bcp trop long.
Dans ce genre de cas, essaye d'isoler le pb, ou d'expliquer un minimum avant de balancer un code comme ca.
Mais c'est pas grave, l'essentiel et de trouver son bonheur ici
je fais comme cela
Est ce bien cela ?
sinon pour mon autre problème, c'est que certain de mes produits ont des - dans leurs noms => exemple : produit-A
avec l'url rewriting j'ai bien l'url comme ceci => produit---A mais quand je clic sur le lien en question, le produit n'est pas trouvé.
en gros je gros qu'il considére le - du milieu comme séparateur également et non comme un caractére du produit.
sinon voici quelques exemple de mes problèmes
voici une url avec un problème de caractére
ici dungeons&dragons => le & se transforme en %26
et ici pour mon deuxieme problème
ici l'article s'appelle dieux et demi-dieux donc j'ai l'url ci dessus, mais si je clic sur le lien, article introuvable.
j'espere etre assez clair.
Merci encore
++
- Code: Tout sélectionner
function mrpropre($chaine){
$tofind = "ÀÁÂÃÄÅàáâãäåÒÓÔÕÖØòóôõöøÈÉÊËèéêëÇçÌÍÎÏìíîïÙÚÛÜùúûüÿÑñ";
$replac = "AAAAAAaaaaaaOOOOOOooooooEEEEeeeeCcIIIIiiiiUUUUuuuuyNn";
strtr($chaine,$tofind,$replac);
return(ereg_replace("[^\w\-]", "", $chaine));
}
Est ce bien cela ?
sinon pour mon autre problème, c'est que certain de mes produits ont des - dans leurs noms => exemple : produit-A
avec l'url rewriting j'ai bien l'url comme ceci => produit---A mais quand je clic sur le lien en question, le produit n'est pas trouvé.
en gros je gros qu'il considére le - du milieu comme séparateur également et non comme un caractére du produit.
sinon voici quelques exemple de mes problèmes
voici une url avec un problème de caractére
- Code: Tout sélectionner
http://localhost/jeux-de-roles/dungeons%26dragons
ici dungeons&dragons => le & se transforme en %26
et ici pour mon deuxieme problème
- Code: Tout sélectionner
http://localhost/jeux-de-roles/dungeons%26dragons/dieux-et-demi---dieux
ici l'article s'appelle dieux et demi-dieux donc j'ai l'url ci dessus, mais si je clic sur le lien, article introuvable.
j'espere etre assez clair.
Merci encore
++
Pour la fonction c'est ok,
En m'aidant de ton code, et avec du code que j'avais j'ai reussi a faire quelques chose..
voici ma fonction mrpropre
donc ici l'url est completement nettoyer, mais le problème étant que certain lien ne fonctionne pas (uniquement pour les produits avec des caractéres spéciaux).
bon du coup avec cette fonction
j'ai par exemple comme url ceci
http://localhost/catalog/jeux-de-roles/dungeons-dragons
donc le & est bien transformé en -.
mais comme j'utilise le - comme séparateur, il considére le - comme un séparateur et non comme un caractére du nom du produit.
j'espere que je suis assez clair...
comment je peux faire pour qu'il comprenne qu'il s'agit bien d'un caractére du produit et non du - utilisé comme séparateur.
Je pense qu'il faut faire une modification au niveau du fichier rewrite.php que je montre au debut, mais je ne sais pas par quoi commencer.
Merci encore
++
En m'aidant de ton code, et avec du code que j'avais j'ai reussi a faire quelques chose..
voici ma fonction mrpropre
- Code: Tout sélectionner
function mrpropre($chaine){
$tofind = " ÀÁÂÃÄÅàáâãäåÒÓÔÕÖØòóôõöøÈÉÊËèéêëÇçÌÍÎÏìíîïÙÚÛÜùúûüÿÑñ()[]'~$&%*@ç!?;,:/\^¨€{}|+-";
$replac = "-AAAAAAaaaaaaOOOOOOooooooEEEEeeeeCcIIIIiiiiUUUUuuuuyNn---------------------E-----";
$mrpropre =(strtr($chaine,$tofind,$replac));
$mrpropre = ereg_replace("\"","-", $mrpropre);
$mrpropre = ereg_replace("[-]{2,}", "-", $mrpropre);
return $mrpropre;
}
donc ici l'url est completement nettoyer, mais le problème étant que certain lien ne fonctionne pas (uniquement pour les produits avec des caractéres spéciaux).
bon du coup avec cette fonction
j'ai par exemple comme url ceci
http://localhost/catalog/jeux-de-roles/dungeons-dragons
donc le & est bien transformé en -.
mais comme j'utilise le - comme séparateur, il considére le - comme un séparateur et non comme un caractére du nom du produit.
j'espere que je suis assez clair...
comment je peux faire pour qu'il comprenne qu'il s'agit bien d'un caractére du produit et non du - utilisé comme séparateur.
Je pense qu'il faut faire une modification au niveau du fichier rewrite.php que je montre au debut, mais je ne sais pas par quoi commencer.
Merci encore
++
Dernière édition par fab27 le Ven Déc 31, 2004 0:52, édité 1 fois.
Bon le problème pour nettoyer l'url est ok...
maintenant j'ai bien des urls nettoyés.
cependant comme je le dis dans mon post ci dessus.
exemple :
j'ai un produit dungeons&dragons
transformé en dungeons-dragons dans l'url
si je clic sur le lien, il ne reconnait pas le produit et j'arrive automatiquement sur la page produit non trouvé.
Donc je suppose maintenant qu'il ne reste plusqu'a faire en sorte que le caractére spéciaux une fois transformé ne soit pas considére comme le séparateur pour le rewriting mais comme le caractére d'origine.
car le problème est similaire avec les '()% ils sont bien transformé en -, mais le lien ne fonctionne pas.
Merci d'avance
++
maintenant j'ai bien des urls nettoyés.
cependant comme je le dis dans mon post ci dessus.
exemple :
j'ai un produit dungeons&dragons
transformé en dungeons-dragons dans l'url
si je clic sur le lien, il ne reconnait pas le produit et j'arrive automatiquement sur la page produit non trouvé.
Donc je suppose maintenant qu'il ne reste plusqu'a faire en sorte que le caractére spéciaux une fois transformé ne soit pas considére comme le séparateur pour le rewriting mais comme le caractére d'origine.
car le problème est similaire avec les '()% ils sont bien transformé en -, mais le lien ne fonctionne pas.
Merci d'avance
++
le php est moi ce n'est pas pour tout de suite
Bon et bien j'arrette pour aujourd'hui, faut bien que je dorme un jour.
je suis vert je bosse sur ce problème depuis déja plusieurs heures et je n'ai pas avancé d'un poil ! CA M'ENERVE.....
toujours ce satané problème avec les caractéres spéciaux et les - .
Si quelqu'un peux m'aiguiller, ou me donner un petit coup de pouce je serais super content.
Encore merci
++
PS : Bon nouvel an a tous ! (en avance
)
je suis vert je bosse sur ce problème depuis déja plusieurs heures et je n'ai pas avancé d'un poil ! CA M'ENERVE.....
toujours ce satané problème avec les caractéres spéciaux et les - .
Si quelqu'un peux m'aiguiller, ou me donner un petit coup de pouce je serais super content.
Encore merci
++
PS : Bon nouvel an a tous ! (en avance
Je n'y arrive pas !
Bonjour,
aprés une bataille acharné, je n'arrive toujours pas a obtenir ce que je souhaite.
Je commence a me tiré les cheuveux ....
C'est pourquoi j'en reviens a vous tous, car j'ai sérieusement besoin d'un coup de main pour faire avancé mon opération.
toujours le même problème.
j'utilise le - comme séparateur et tout mes liens qui contiennent avant le rewrite un - a l'intérieur ne fonctionne pas
exemple : j'ai un produit => toto-titi
mon lien est toto-titi (le - du produit est interpreté comme étant un séparateur alors qu'il n'en est pas un)
et quand je clic sur le lien rien ne marche (erreur 404)
il en est de même pour les caractére spéciaux que je transforme en -
Merci d'avance
PS : j'ai supprimé tout le code inutile pour le premier post (afin de le rendre plus lisible)
++
fab
aprés une bataille acharné, je n'arrive toujours pas a obtenir ce que je souhaite.
Je commence a me tiré les cheuveux ....
C'est pourquoi j'en reviens a vous tous, car j'ai sérieusement besoin d'un coup de main pour faire avancé mon opération.
toujours le même problème.
j'utilise le - comme séparateur et tout mes liens qui contiennent avant le rewrite un - a l'intérieur ne fonctionne pas
exemple : j'ai un produit => toto-titi
mon lien est toto-titi (le - du produit est interpreté comme étant un séparateur alors qu'il n'en est pas un)
et quand je clic sur le lien rien ne marche (erreur 404)
il en est de même pour les caractére spéciaux que je transforme en -
Merci d'avance
PS : j'ai supprimé tout le code inutile pour le premier post (afin de le rendre plus lisible)
++
fab
11 messages • Page 1 sur 1
Formation recommandée sur ce thème :
Formation URL Rewriting et sites dynamiques : apprenez comment mettre en place la réécriture d'URL, comment optimiser vos URL et profiter de vos pages dynamiques pour booster votre référencement. Formation animée par Olivier Duffez et Fabien Facériès, experts en référencement naturel.
Tous les détails sur le site Ranking Metrics : programme, prix, dates et lieux, inscription en ligne.
Lectures recommandées sur ce thème :
- Robots.txt : Yahoo supporte les options avancées
- Le gPhone, téléphone mobile révolutionnaire ?
- L'URL Rewriting expliqué aux débutants
- Google Sitemap Generator version 1.3
- Référencement Bing : tout ce qu'il faut savoir pour réussir
- Les bonnes pratiques d'Opquast pour le référencement
- Google traque les colis UPS ou FedEx
- Conseils d'optimisation de la balise TITLE (titre d'une page HTML)
- Publicité contextuelle Yahoo YPN (Yahoo! Publisher Network)
- Google lance Picasa en français
Consultez la description détaillée des produits ou services de Google suivants : Google Co-Op
- Calcul du nombre de backlinks
Cet outil vous permet d'analyser en détails la "popularité" de votre site sur Google. En plus du nombre de liens pris en compte par Google, il calcule le pourcentage de liens internes parmi tous les liens, et il affiche les premières URL trouvées. - Transformer des citations en liens
Cet outil vous permet de trouver des pages citant votre site mais ne faisant pas (encore) de lien. Il suffira parfois d'un simple mail pour transformer cette simple citation en lien (backlink).
Qui est en ligne
Utilisateurs parcourant ce forum: Aucun utilisateur enregistré et 0 invités







le forum