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


Fab le Fou
WRInaute passionné
WRInaute passionné
 
Messages: 1511
Inscription: 2 Déc 2004

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 impliqué
WRInaute impliqué
 
Messages: 858
Inscription: 26 Mar 2005

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

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


Fab le Fou
WRInaute passionné
WRInaute passionné
 
Messages: 1511
Inscription: 2 Déc 2004

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 impliqué
WRInaute impliqué
 
Messages: 573
Inscription: 19 Mar 2004

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 passionné
WRInaute passionné
 
Messages: 2151
Inscription: 18 Avr 2005

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 passionné
WRInaute passionné
 
Messages: 1511
Inscription: 2 Déc 2004

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 passionné
WRInaute passionné
 
Messages: 1511
Inscription: 2 Déc 2004

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 impliqué
WRInaute impliqué
 
Messages: 858
Inscription: 26 Mar 2005

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 passionné
WRInaute passionné
 
Messages: 1511
Inscription: 2 Déc 2004

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 impliqué
WRInaute impliqué
 
Messages: 573
Inscription: 19 Mar 2004

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 impliqué
WRInaute impliqué
 
Messages: 573
Inscription: 19 Mar 2004

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 passionné
WRInaute passionné
 
Messages: 1511
Inscription: 2 Déc 2004

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 passionné
WRInaute passionné
 
Messages: 1511
Inscription: 2 Déc 2004

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


Si vous avez aimé cette discussion, partagez-la sur vos réseaux sociaux préférés :

Lectures recommandées sur ce thème :



Qui est en ligne

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


cron