problème de génération d'url à partir d'un texte

Consultez la formation au référencement naturel Google de WebRankInfo / Ranking Metrics


Fab le Fou
WRInaute accro
WRInaute accro
 
Messages: 1511
Inscription: Jeu Déc 02, 2004 15:20

problème de génération d'url à partir d'un texte

Message le Jeu Déc 15, 2005 15:52

Salut,

De manière à générer automatiquement des url de page à partir d'un champ de saisie (par ex. le titre d'un texte), j'utilise une fonction php inspirée d'urlencode() mais prenant en compte un plus grand nombre de caractères (via des str_replace() en série).

Mon problème c'est qu'il semble y avoir un problème de reconnaissance des caractères spéciaux, suivant les utilisateurs.

Par exemple, si je saisie "le corbeau et le renard" ma fonction va bien remplacer les espaces pas des tirets et me donner "le-corbeau-et-le-renard" mais avec certains utilisateurs, je vais obtenir : "le%20corbeau%20et%20le%20renard", bref les espaces ne sont pas reconnus et donc pas remplacés.

Ceci est également valable pour d'autres caractères.

Je penche pour les cas de figure où le texte est copier / coller à partir d'une application du type MS Word, dans laquelle les caractères ont un codage spécial, mais je ne sais pas comment faire pour créer une fonction gérant tous les cas de figure...

Fab


Tilt
WRInaute passionné
WRInaute passionné
 
Messages: 818
Inscription: Sam Mar 26, 2005 11:48

Message le Jeu Déc 15, 2005 17:39

il faudrait le detail de ton code pour t'aider efficacement


Fab le Fou
WRInaute accro
WRInaute accro
 
Messages: 1511
Inscription: Jeu Déc 02, 2004 15:20

Message le Jeu Déc 15, 2005 18:02

Ok voici la fonction que j'appelle à différents endroits :

Code: Tout sélectionner
function mon_urlencode($url)
{
$url=strtolower(trim(stripslashes($url)));

//--caractères supprimés.
$url=str_replace("…","",$url);
$url=str_replace("«","",$url);
$url=str_replace("«","",$url);
$url=str_replace("»","",$url);
$url=str_replace("»","",$url);
$url=str_replace("!","",$url);
$url=str_replace("?","",$url);
$url=str_replace("\"","",$url);
$url=str_replace("/","",$url);
$url=str_replace(":","",$url);
$url=str_replace(")","",$url);
$url=str_replace("#","",$url);
$url=str_replace(".","",$url);
$url=str_replace(",","",$url);
$url=str_replace("%","",$url);

//--caractères remplacés.
$url=str_replace(" ","-",$url);
$url=str_replace("'","-",$url);
$url=str_replace("’","-",$url);
$url=str_replace("(","-",$url);
$url=str_replace("_","-",$url);
$url= str_replace("--", "-", $url);
$url= str_replace("&", "et", $url);
$url=str_replace("é","e",$url);
$url=str_replace("è","e",$url);
$url=str_replace("ê","e",$url);
$url=str_replace("ë","e",$url);
$url=str_replace("à","a",$url);
$url=str_replace("â","a",$url);
$url=str_replace("ä","a",$url);
$url=str_replace("ù","u",$url);
$url=str_replace("û","u",$url);
$url=str_replace("ü","u",$url);
$url=str_replace("ï","i",$url);
$url=str_replace("î","i",$url);
$url=str_replace("ô","o",$url);
$url=str_replace("ö","o",$url);
$url=str_replace("ç","c",$url);

return $url;
}


Elle est toute simple et marche très bien quand c'est moi qui saisie, mais avec certaines personnes, ça ne passe pas...

Fab


jerome347
WRInaute passionné
WRInaute passionné
 
Messages: 573
Inscription: Ven Mar 19, 2004 13:09

Re: problème de génération d'url à partir d'un texte

Message le Jeu Déc 15, 2005 18:23

Fab le Fou a écrit:Je penche pour les cas de figure où le texte est copier / coller à partir d'une application du type MS Word, dans laquelle les caractères ont un codage spécial, mais je ne sais pas comment faire pour créer une fonction gérant tous les cas de figure...

En prenant le problème à l'inverse ?
N'accepter par exemple que abcd...z012...9 et remplacer tout le reste par un tiret.


Borower
WRInaute accro
WRInaute accro
 
Messages: 2151
Inscription: Lun Avr 18, 2005 20:58

Message le Jeu Déc 15, 2005 19:00

Pourquoi tu n'utilise pas un code beaucoup moin long
Code: Tout sélectionner
function suppaccents($mot){
$accents = "ÀÁÂÃÄÅàáâãäåÒÓÔÕÖØòóôõöøÈÉÊËèéêëÇçÌÍÎÏìíîïÙÚÛÜùúûüÿÑñ";
$ssaccents = "AAAAAAaaaaaaOOOOOOooooooEEEEeeeeCcIIIIiiiiUUUUuuuuyNn";
return(strtr($mot,$accents,$ssaccents));
}


Fab le Fou
WRInaute accro
WRInaute accro
 
Messages: 1511
Inscription: Jeu Déc 02, 2004 15:20

Re: problème de génération d'url à partir d'un texte

Message le Ven Déc 16, 2005 9:21

jerome347 a écrit:En prenant le problème à l'inverse ?
N'accepter par exemple que abcd...z012...9 et remplacer tout le reste par un tiret.


Excellente idée ! :)
Je vais essayer d'écrire une fonction qui fait ça.


Fab le Fou
WRInaute accro
WRInaute accro
 
Messages: 1511
Inscription: Jeu Déc 02, 2004 15:20

Message le Ven Déc 16, 2005 9:23

Borower a écrit:Pourquoi tu n'utilise pas un code beaucoup moin long


C'est totalement subjectif, mais je trouve cela plus clair à lire.
D'autres penseront l'inverse...


Tilt
WRInaute passionné
WRInaute passionné
 
Messages: 818
Inscription: Sam Mar 26, 2005 11:48

Message le Sam Déc 17, 2005 13:36

As-tu essayé de remplacer la 1ère ligne de ta fonction:
$url=strtolower(trim(stripslashes($url)));


Par:

$url=strtolower(trim(stripslashes(urldecode($url))));


Fab le Fou
WRInaute accro
WRInaute accro
 
Messages: 1511
Inscription: Jeu Déc 02, 2004 15:20

Message le Sam Déc 17, 2005 14:20

En fait, le nom de ma variable est mal choisi.

Il s'agit en fait d'un texte que je transmets à ma fonction et non d'une url.
Le texte en question provient d'un des champs de ma bd mysql.

Au final, la solution de jerome347 ne convient pas non plus, puisque je ne souhaite pas remplacer tous les caractères spéciaux par des tirets (par ex. "à" est remplacé par "a", cf la fonction).

Ce que je ne comprends pas c'est pourquoi ma fonction n'arrive pas toujours à reconnaître les caractères qui sont listés.

Mon histoire de MS Word est une supposition, mais c'est étrange puisque quand on recopie un texte dans un champ de formulaire et à fortiori quand il a été enregistré dans la base, le codage Word devrait disparaître, non ?


jerome347
WRInaute passionné
WRInaute passionné
 
Messages: 573
Inscription: Ven Mar 19, 2004 13:09

Message le Lun Déc 19, 2005 14:14

Dans la doc de strtr sur php.net :

To replace unicode characters with their ascii equivalents, use

$my_string = strtr($my_string, $unicode_array);

using this array:

$unicode_array = array(
"–" => "-",
"—" => "-",
"–" => "-",
"‘" => "'",
"’" => "'",
"’" => "'",
"‘" => "'",
"…" => "...",
"…" => "...",
"“" => "\"",
"“" => "\"",
"”" => "\"",
"”" => "\"",
);

It is important to note you need both the unicode contol character (”) AND its text equivalent (”). For instance, text copied and pasted into your html form from M$ Word will have the control character, whereas the same text viewed in a browser and copied into your html form using drag-and-drop will have the text equivalent.

A pox on Redmond for the way M$ Word is set to convert all these characters to unicode equivalents by default.


jerome347
WRInaute passionné
WRInaute passionné
 
Messages: 573
Inscription: Ven Mar 19, 2004 13:09

Message le Lun Déc 19, 2005 14:25

J'ai aussi trouvé cette fonction :

function un_microsuck($text){
static $chars = array(
128 => '€',
130 => '‚',
131 => 'ƒ',
132 => '„',
133 => '…',
134 => '†',
135 => '‡',
136 => 'ˆ',
137 => '‰',
138 => 'Š',
139 => '‹',
140 => 'Œ',
142 => 'Ž',
145 => '‘',
146 => '’',
147 => '“',
148 => '”',
149 => '•',
150 => '–',
151 => '—',
152 => '˜',
153 => '™',
154 => 'š',
155 => '›',
156 => 'œ',
158 => 'ž',
159 => 'Ÿ');
$text = str_replace(array_map('chr', array_keys($chars)), $chars,
$text);
return $text;
}


Fab le Fou
WRInaute accro
WRInaute accro
 
Messages: 1511
Inscription: Jeu Déc 02, 2004 15:20

Message le Lun Déc 19, 2005 14:48

A mon avis la deuxième fonction devrait coller.

Je vais donc l'ajouter à mon code et voir ce que ça donnera lorsqu'un de mes auteurs ajoutera un texte (bah oui, comme j'utilise OpenOffice, moi je n'ai jamais de problèmes :wink: ...)

En tous cas merci, bonne trouvaille !

Je viendrai mettre à jour ce topic si je me rends compte qu'il est nécessaire d'ajouter certaines occurences à la fonction.

@+, Fab


Fab le Fou
WRInaute accro
WRInaute accro
 
Messages: 1511
Inscription: Jeu Déc 02, 2004 15:20

Message le Jeu Jan 05, 2006 15:42

Je reviens sur ce problème car même avec la fonction précédente il reste des erreurs avec les espaces et c'est souvent eux qui me posent des problèmes en me générant des url non conformes...

En fait il faudrait ajouter à la fonction suivante la gestion des différents codages générant des espaces sur ms word, mais pas moyen de trouver l'info sur le web...

Si quelqu'un a une version de MS Office sur son PC, il me semble que tous les codes se trouvent dans l'aide de VBA (notamment d'Access).


Formation recommandée sur ce thème :

Formation Référencement naturel Google : apprenez une méthode efficace pour optimiser à fond le référencement naturel dans Google de façon durable... 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 :



Qui est en ligne

Utilisateurs parcourant ce forum: Aucun utilisateur enregistré et 1 invité