Webmaster Hub: Transformer un texte en url - Webmaster Hub

Aller au contenu

  • 2 Pages +
  • 1
  • 2
  • Vous ne pouvez pas commencer un sujet
  • Vous ne pouvez pas répondre à ce sujet

Transformer un texte en url Supprimer les accents, et nettoyer le texte des éléments superflus Noter : -----

#1 L'utilisateur est hors-ligne   captain_torche 

  • Danacol / Orangina rouge
  • Groupe : Admin
  • Messages : 6 658
  • Inscrit(e) : 08-février 06
  • Genre:Homme
  • Localisation:Savigny / Orge

Posté 03 octobre 2008 - 15:54

Je viens de rédiger un nouvel article sur la génération d'url propre en PHP : Transformer un texte en url.
Il explique comment supprimer les accents d'une chaîne de caractères, puis comment formater cette dernière afin qu'elle demeure le plus propre possible.

Je suis ouvert à vos remarques et commentaires ;)

Edit du 5/09/2011 : SStephane vient de poster une fonction similaire, mais beaucoup plus compacte : http://www.webmaster...post__p__337105
Vous avez rêvé cette nuit ? Partagez vos rêves sur l'Onironaute !
Bijoux fantaisie
Recherche nounou
0

#2 L'utilisateur est hors-ligne   KaRaK 

  • Groupe : Membre+
  • Messages : 738
  • Inscrit(e) : 14-juillet 05
  • Localisation:Lille

Posté 03 octobre 2008 - 16:24

Bonjour,

Merci pour les explications et le code.
Je pense qu'une petite remarque sur urlencode() aurait été la bienvenue pour compléter l'article.
3 liens pour référenceur coquin
Le site Outil Référencement : un vieux site sur le SEO.
Création de trafic avec Oseox (Tutoriels Référencement, Adwords et Développement web)
Actualité Web Marketing et Search Marketing : Blog Referencement encore un !
0

#3 L'utilisateur est hors-ligne   captain_torche 

  • Danacol / Orangina rouge
  • Groupe : Admin
  • Messages : 6 658
  • Inscrit(e) : 08-février 06
  • Genre:Homme
  • Localisation:Savigny / Orge

Posté 03 octobre 2008 - 16:32

Que veux-tu dire par là ? Tu veux parler des limitations de la fonction ?
Vous avez rêvé cette nuit ? Partagez vos rêves sur l'Onironaute !
Bijoux fantaisie
Recherche nounou
0

#4 L'utilisateur est hors-ligne   KaRaK 

  • Groupe : Membre+
  • Messages : 738
  • Inscrit(e) : 14-juillet 05
  • Localisation:Lille

Posté 03 octobre 2008 - 17:10

Oui et aussi parce qu'elle pourra être utile aux lecteurs qui liront ton article.

En guise d'introduction peut être pour expliquer les limites de la fonction et les avantages de ton script :)
Mais c'est pas indispensable !=)
3 liens pour référenceur coquin
Le site Outil Référencement : un vieux site sur le SEO.
Création de trafic avec Oseox (Tutoriels Référencement, Adwords et Développement web)
Actualité Web Marketing et Search Marketing : Blog Referencement encore un !
0

#5 L'utilisateur est hors-ligne   Dadou 

  • Light or Dark Side ?
  • Groupe : Fondateur
  • Messages : 3 205
  • Inscrit(e) : 29-avril 04
  • Genre:Homme
  • Localisation:13 rue Offenbach, Barentin

Posté 03 octobre 2008 - 17:14

mais il est en forme aujourd'hui le captain_torche, ou alors il s'ennuie sévère deux articles dans la même journée.

L'article est très bien rédigé, mais juste une petite remarque la conversion des accents qui peut poser problème dans certains cas : par exemple je ne travaille qu'en utf8, donc la conversion ne passe pas bien ;)
« Demander ne coûte qu’un instant d’embarras ; ne pas demander, c’est être embarrassé toute sa vie. » (Proverbe japonais)
- Mon petit site a moi
0

#6 L'utilisateur est hors-ligne   captain_torche 

  • Danacol / Orangina rouge
  • Groupe : Admin
  • Messages : 6 658
  • Inscrit(e) : 08-février 06
  • Genre:Homme
  • Localisation:Savigny / Orge

Posté 03 octobre 2008 - 18:36

Effectivement, ça ne passe pas en UTF-8, je vais le corriger de ce pas ;) (Edit: voilà qui est fait)
Et quant à avoir du temps ... J'ai rédigé le premier article hier soir après la question d'un membre, et j'avais de gros scripts d'import qui tournaient dans la journée; ce temps n'a pas été perdu pour tout le monde ;)

Karak, j'ai ajouté le petit paragraphe d'introduction.
Vous avez rêvé cette nuit ? Partagez vos rêves sur l'Onironaute !
Bijoux fantaisie
Recherche nounou
0

#7 L'utilisateur est hors-ligne   adn 

  • ADN l'origine...
  • Groupe : Membre+
  • Messages : 1 102
  • Inscrit(e) : 24-janvier 04
  • Genre:Homme
  • Localisation:-40m
  • Société:ADN Création

Posté 06 novembre 2008 - 10:01

Merci Captain pour ton article.
Une suggestion, il serait intéressant de supprimer après la transformation tous les mots de 1 ou 2 lettres qui rallongent inutilement l'url.
0

#8 L'utilisateur est hors-ligne   Dadou 

  • Light or Dark Side ?
  • Groupe : Fondateur
  • Messages : 3 205
  • Inscrit(e) : 29-avril 04
  • Genre:Homme
  • Localisation:13 rue Offenbach, Barentin

Posté 06 novembre 2008 - 10:06

Pas forcement, dans certains cas les mots de une ou deux lettres peuvent avoir une grande importance. Par exemple une page produit avec la référence produit dans le titre du style : AC 350D qui deviendrait 350D, et la ce n'aurais plus de sens, ou pour des abréviations, des acronymes...
« Demander ne coûte qu’un instant d’embarras ; ne pas demander, c’est être embarrassé toute sa vie. » (Proverbe japonais)
- Mon petit site a moi
0

#9 L'utilisateur est hors-ligne   adn 

  • ADN l'origine...
  • Groupe : Membre+
  • Messages : 1 102
  • Inscrit(e) : 24-janvier 04
  • Genre:Homme
  • Localisation:-40m
  • Société:ADN Création

Posté 06 novembre 2008 - 10:47

Ce serait plutôt une option effectivement puisque cela dépend de l'utilisation. Dans mon cas, la plupart du temps il n'y a pas de références mais des mots de la langue française uniquement.
0

#10 L'utilisateur est hors-ligne   MonWeb 

  • Groupe : Hubmaster
  • Messages : 150
  • Inscrit(e) : 12-septembre 03
  • Localisation:Monaco

Posté 25 novembre 2008 - 20:27

Bonjour,

J'ai utilisé le code pour convertir les liens hypertexte qui sont dans mes pages
cines.html est transformé en decines.html ça marche bien :thumbsup:

Et l'estaque.html est bien transformé en l-estaque.html mais la base mysql ne répond pas.

Pourtant mon fichier htacces peut réécrire l'estaque.html et la base répond Ok

Ma réécriture d'url n'est pas bonne ?

Ce message a été modifié par MonWeb - 25 novembre 2008 - 20:28.

0

#11 L'utilisateur est hors-ligne   captain_torche 

  • Danacol / Orangina rouge
  • Groupe : Admin
  • Messages : 6 658
  • Inscrit(e) : 08-février 06
  • Genre:Homme
  • Localisation:Savigny / Orge

Posté 25 novembre 2008 - 23:35

Effectivement, cela doit dépendre de la manière dont tu gères ta réécriture. Je t'invite à créer un nouveau sujet avec plus de précisions.
Vous avez rêvé cette nuit ? Partagez vos rêves sur l'Onironaute !
Bijoux fantaisie
Recherche nounou
0

#12 L'utilisateur est hors-ligne   TheRec 

  • Groupe : Admin
  • Messages : 1 757
  • Inscrit(e) : 18-janvier 05
  • Localisation:Lausanne
  • Société:HexaDec Sàrl

Posté 26 novembre 2008 - 10:21

Très bien cet article captain_torche, merci :)
Joli coup pour le remplacement des accents, je n'y aurais pas pensé.

Concernant la fonction is_utf8, c'est une détection d'octets longs assez approximative... en fait il n'est pas possible de détecter efficacement (sans BOM ... et encore c'est une indication uniquement) si une chaîne est encodée ou non en UTF-8 (ou un autre chartset). Pour information il existe également une extension de PHP qui permet de faire le même travail que cette fonction qui s'appelle mbstring (pas toujours disponible car il faut l'installer, elle n'est pas présente par défaut) et la détection peut se faire grâce à mb_detect_encoding. Maintenant, rien qu'en lisant les commentaires on s'aperçoit que la détection doit se faire sensiblement de la même manière vu les bugs liés à divers caractères étendus. Mais c'est tout de même mieux que de simplement ignorer l'UTF-8 et je ne vois de toute façon pas de solution viable... c'est pour cela qu'il n'est pas recommandé d'avoir des charset différents dans un même système ;)

Encore une chose, urlencode ou plutôt rawurlencode (une des différences entre ces deux fonction est l'encodage des espaces, respectivement "+" et "%20") suit la RFC1738 et s'applique aux données passée dans la querystring. Pour ce qui vient avant la querystring, il faut procéder à un double encodage, cela correspond à la RFC3986, section 2.5). Mais cela pose d'autres problèmes au niveau des moteurs de recherches qui ne semblent pas respecter cette RFC3986 en stockant des URL décodées, comme je l'avais évoqué précédemment.
0

#13 L'utilisateur est hors-ligne   captain_torche 

  • Danacol / Orangina rouge
  • Groupe : Admin
  • Messages : 6 658
  • Inscrit(e) : 08-février 06
  • Genre:Homme
  • Localisation:Savigny / Orge

Posté 26 novembre 2008 - 10:24

Il faudra encore que je l'améliore, un collègue allemand me faisait remarquer que les ligatures n'étaient pas prises en compte (e dans l'o, eszett, etc). Merci pour toutes ces précisions !
Vous avez rêvé cette nuit ? Partagez vos rêves sur l'Onironaute !
Bijoux fantaisie
Recherche nounou
0

#14 L'utilisateur est hors-ligne   Dadou 

  • Light or Dark Side ?
  • Groupe : Fondateur
  • Messages : 3 205
  • Inscrit(e) : 29-avril 04
  • Genre:Homme
  • Localisation:13 rue Offenbach, Barentin

Posté 26 novembre 2008 - 13:08

eszett?? ça existe toujours en allemand, je croyais qu'ils ne l'utilisaient plus
« Demander ne coûte qu’un instant d’embarras ; ne pas demander, c’est être embarrassé toute sa vie. » (Proverbe japonais)
- Mon petit site a moi
0

#15 L'utilisateur est hors-ligne   captain_torche 

  • Danacol / Orangina rouge
  • Groupe : Admin
  • Messages : 6 658
  • Inscrit(e) : 08-février 06
  • Genre:Homme
  • Localisation:Savigny / Orge

Posté 26 novembre 2008 - 13:27

C'est également ce qu'on m'avait dit au lycée, mais il est apparemment toujours d'actualité ;)
Vous avez rêvé cette nuit ? Partagez vos rêves sur l'Onironaute !
Bijoux fantaisie
Recherche nounou
0

#16 L'utilisateur est hors-ligne   MonWeb 

  • Groupe : Hubmaster
  • Messages : 150
  • Inscrit(e) : 12-septembre 03
  • Localisation:Monaco

Posté 27 novembre 2008 - 05:59

J'ai trouvé un autre truc ;)

Un œuf à la coque donne un -uf à la coque

Donc la ville de Cricquebœuf.htm se transforme en cricqueb-uf.htm au lieu de Criqueboeuf.htm
0

#17 L'utilisateur est hors-ligne   captain_torche 

  • Danacol / Orangina rouge
  • Groupe : Admin
  • Messages : 6 658
  • Inscrit(e) : 08-février 06
  • Genre:Homme
  • Localisation:Savigny / Orge

Posté 27 novembre 2008 - 08:16

Oui, c'est le bug dont je parlais quelques messages plus haut. Je le corrigerai aujourd'hui, si j'ai du temps.
Vous avez rêvé cette nuit ? Partagez vos rêves sur l'Onironaute !
Bijoux fantaisie
Recherche nounou
0

#18 L'utilisateur est hors-ligne   captain_torche 

  • Danacol / Orangina rouge
  • Groupe : Admin
  • Messages : 6 658
  • Inscrit(e) : 08-février 06
  • Genre:Homme
  • Localisation:Savigny / Orge

Posté 27 novembre 2008 - 10:52

Je viens de mettre l'article à jour. Les caractères ligaturés devraient être transformés, si tant est que le jeu de caractère soit bien UTF-8.
Vous avez rêvé cette nuit ? Partagez vos rêves sur l'Onironaute !
Bijoux fantaisie
Recherche nounou
0

#19 L'utilisateur est hors-ligne   MonWeb 

  • Groupe : Hubmaster
  • Messages : 150
  • Inscrit(e) : 12-septembre 03
  • Localisation:Monaco

Posté 27 novembre 2008 - 11:59

Merci d'avoir consacré du temps pour cette correction

Mais ça marche pas :(

Œuilly.html devient .html et la totalité est effacé

En fait Château.html est lui aussi supprimé en .html

Ce message a été modifié par MonWeb - 27 novembre 2008 - 12:27.

0

#20 L'utilisateur est hors-ligne   captain_torche 

  • Danacol / Orangina rouge
  • Groupe : Admin
  • Messages : 6 658
  • Inscrit(e) : 08-février 06
  • Genre:Homme
  • Localisation:Savigny / Orge

Posté 27 novembre 2008 - 12:20

J'ai remodifié l'article, un petit oubli s'y était glissé.
Je précise que ces fonction ne fonctionnent que pour de l'UTF-8. Si tes fichiers sont encodés autrement, tu peux utiliser ces fonctions :
function enleve_accents($chaine) {
	$reg = '/&(.)(acute|grave|circ|uml|cedil|ring|tilde|slash);/';
	return preg_replace($reg, '\1', htmlentities($chaine));
}

function enleve_ligatures($chaine) {
	$tab = array('œ' => 'oe', 'Œ' => 'OE', 'ß' => 'ss');
	foreach($tab as $key => $value)
		$chaine = str_replace($key, $value, $chaine);
	$reg = '|&([a-zA-Z]{2})lig;|';
	return preg_replace($reg, '\1', $chaine);
}

function suppr_speciaux($chaine) {
	$reg = '|(&[a-zA-Z0-9]*;)|U';
	return preg_replace($reg, '-', $chaine);
}

function nettoie_url($texte) {
	if(is_utf8($texte))
		$texte = utf8_decode($texte);
	$texte = strtolower(suppr_speciaux(enleve_ligatures(enleve_accents($texte))));
	$reg = '|([^a-z0-9]+)|';
	$texte = preg_replace($reg, '-', $texte);
	return trim($texte, '-');
}

function is_utf8($string) {
	return !strlen(
		preg_replace(
		',[\x09\x0A\x0D\x20-\x7E]'            # ASCII
		. '|[\xC2-\xDF][\x80-\xBF]'             # non-overlong 2-byte
		. '|\xE0[\xA0-\xBF][\x80-\xBF]'         # excluding overlongs
		. '|[\xE1-\xEC\xEE\xEF][\x80-\xBF]{2}'  # straight 3-byte
		. '|\xED[\x80-\x9F][\x80-\xBF]'         # excluding surrogates
		. '|\xF0[\x90-\xBF][\x80-\xBF]{2}'      # planes 1-3
		. '|[\xF1-\xF3][\x80-\xBF]{3}'          # planes 4-15
		. '|\xF4[\x80-\x8F][\x80-\xBF]{2}'      # plane 16
		. ',sS',
		'', $string)
	);
}

Vous avez rêvé cette nuit ? Partagez vos rêves sur l'Onironaute !
Bijoux fantaisie
Recherche nounou
0

Partager ce sujet :


  • 2 Pages +
  • 1
  • 2
  • Vous ne pouvez pas commencer un sujet
  • Vous ne pouvez pas répondre à ce sujet

1 utilisateur(s) en train de lire ce sujet
0 membre(s), 1 invité(s), 0 utilisateur(s) anonyme(s)