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 : -----

#21 L'utilisateur est hors-ligne   MonWeb 

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

Posté 27 novembre 2008 - 12:37

Mes pages
<meta http-equiv="Content-Type" content="text/html;charset=utf-8" />

Ma base
Utf8 Interclassement utf8_unicode_ci

Avec ta dernière modification dans transformer un texte en url

Œuilly.html devient uilly.html on y est presque il manque le o ;)

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

0

#22 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é 27 novembre 2008 - 15:31

J'ai une fonction de conversion en uft8 qui je pense est assez propre :

function Utf8($sValue) {
	if (mb_check_encoding($sValue, 'UTF-8')) {
		return $sValue;
	}
	else return utf8_encode($sValue);
	}


Mais il faut l'extension mbstring d'installer sur le serveur
« 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

#23 L'utilisateur est hors-ligne   TheRec 

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

Posté 27 novembre 2008 - 17:36

C'est un peu ce que j'ai dit en première page Dadou :P Mais avec le code déjà prêt ;) Merci ... je n'ai pas creuser dans le code de cette extension, mais je suppose que la détection suit le même schéma logique, on tente de détecter la longueur des caractères et leur type, mais on arrive vite au limites de cette méthode... lorsqu'on utilise des caractères des alphabets russes, chinois, etc.

Et malheureusement, bon nombre d'hébergements mutualisés ne proposent pas mbstring par défaut et pourtant cette extension est très utile et je doute qu'elle consomme tant de ressources que cela, dommage :(
0

#24 L'utilisateur est hors-ligne   MonWeb 

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

Posté 27 novembre 2008 - 17:44

Citation

mais on arrive vite au limites de cette méthode.

Pourquoi il y a mieux quand on a un hébergement mutualisé :whistling:
Je le trouve super ce code c'est le plus complet que j'ai trouvé, mais je suis pas contre autre chose ;)

Pour le moment Œuilly Bonnœil donne uilly-bonn-il et je cherche un magicien :P

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

0

#25 L'utilisateur est hors-ligne   Patrick 

  • Le débordeur !
  • Groupe : Fondateur
  • Messages : 2 139
  • Inscrit(e) : 14-décembre 04
  • Genre:Homme
  • Localisation:Les Maillys
  • Société:Adifco

  Posté 27 novembre 2008 - 18:44

Arf j'ai fait il y a quelque temps un truc similaire mais qui marche que pour iso-8859-1 :blush:
ça pourrait faire un bon complément de l'excellent travail de Captain et pourquoi pas donner lieu à une fonction unique qui gèrerai les 2 charset de façon indifférente.
Dès que je trouve 5 minutes je plonge dans mes bout-de-scripts-qui-peuvent-servir-et-qui-sont-dans-un-coin.html pour trouver ça.

++

Patrick
Devis référencement pour votre site.
Référencement avec paiement aux résultats, la première page de Google sinon rien !
Référencement pour TPE, PME/PMI et grands comptes.
Adifco est un organisme de formation agréé: HTML, CSS, PHP, MySQL, SEO, SEA, etc.
0

#26 L'utilisateur est hors-ligne   Pulsar-san 

  • Groupe : Membre
  • Messages : 3
  • Inscrit(e) : 01-janvier 07
  • Localisation:Vincennes

Posté 08 janvier 2009 - 22:22

Hum, l'intéret d'une telle fonction est tout de même assez limitée.
En effet, les RFC 3986 et 3987, datant de 2005 et créées dans le cadre de l'internationalisation du Web, précisent bien que les accents et les lettres non latines peuvent être utilisées dans les URI.
D'ailleurs, une url comme celle-ci :
-http://xxxxxxxxx/userinfo/池田.html
ou celle-ci :
-http://xxxxxxxxx/userinfo/Никита.html
fonctionnent parfaitement.

Même un nom de domaine en kanji devrait être correctement interprété.

Ce message a été modifié par Pulsar-san - 08 janvier 2009 - 22:24.

La liberté des uns s'arrête là où commence celle des autres.
La mienne est sans limite.
0

#27 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é 08 janvier 2009 - 22:28

L'avantage d'avoir des urls alphanumériques sans accent, c'est que chacun peut saisir une adresse à la main.
Si je mets un accent dans mon url, j'empêche potentiellement une grande partie du monde de saisir l'adresse à la main. A plus forte raison avec une url en kanji ou cyrillique.
Vous avez rêvé cette nuit ? Partagez vos rêves sur l'Onironaute !
Bijoux fantaisie
Recherche nounou
0

#28 L'utilisateur est hors-ligne   x12345 

  • Groupe : Membre
  • Messages : 1
  • Inscrit(e) : 16-février 09

Posté 16 février 2009 - 11:47

Bonjour,

Pouvez-vous m'expliquer comment se servir de ces fonctions ?
Dès que je veux les mettre dans ma page j'ai un message d'erreur PHP me disant que la fonction est déjà déclarée et qu'il n'est pas possible de la re-déclarer, mais je ne déclare la fonction qu'une seule fois pourtant :
Fatal error: Cannot redeclare enleve_accents() (previously declared in H:\news2.php:368) in H:\news2.php on line 368

Evidemment je ne déclare pas la fonction sur la même ligne donc je ne comprends pas le message d'erreur...

J'ai mis les fonctions à la suite dans mon code, de cette façon :

$texte = $post_subject;
                function enleve_accents($chaine) {
                $reg = '/&(.)(acute|grave|circ|uml|cedil|ring|tilde|slash);/';
                return preg_replace($reg, '\1', htmlentities($chaine, ENT_COMPAT, 'UTF-8'));
        }
	
		function enleve_ligatures($chaine) {
                $chaine = str_replace('&szlig;', 'ss', $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_encode($texte);
                $texte = strtolower(suppr_speciaux(enleve_ligatures(enleve_accents($texte))));
                $reg = '|([^a-z0-9]+)|';
                $texte = preg_replace($reg, '-', $texte);
                return trim($texte, '-');
        }

Est ce que c'est bien comme ça qu'il faut faire ? Ou il faut inclure des prototypes quelque part ?
0

#29 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é 16 février 2009 - 11:52

Logiquement ça devrait fonctionner, même si ce n'est pas la solution la plus propre. Pourrais-tu coller l'ensemble de ton code ?
Vous avez rêvé cette nuit ? Partagez vos rêves sur l'Onironaute !
Bijoux fantaisie
Recherche nounou
0

#30 L'utilisateur est hors-ligne   Xethorn 

  • Groupe : Hubmaster
  • Messages : 310
  • Inscrit(e) : 29-avril 04
  • Genre:Homme

Posté 29 décembre 2009 - 19:58

La conversion de texte en url est problematique meme pour des sites comme Google, surtout depuis l'arrivee du deeplinking. Pour le moment, Gmail fonctionne tres bien lorsqu'un lien est entoure des <>. Exemple: <http://monsiteweb.com/#deeplinkin/:step>. Il est desormais possible de mettre tout et rien. Les algorithmes les plus simples consistent a chercher le prochain espace ... mais ne fonctionne pas du tout avec les pages web du style: "http://monsiteweb.com/mais il est fou.html#il a bifurque".

Jusqu'a aujourd'hui, je n'ai pas trouve de solution universelle (excepte en encapsulant).
My 2 cents.
0

#31 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é 29 décembre 2009 - 20:20

Là, c'est un peu différent : tu parles de détection d'url dans un texte, et l'article de base ne parle "que" de modification de texte ;)
Dans l'idéal, il faudrait trouver (ou concocter) une expression régulière qui respecte toutes les formes différentes que puisse prendre une url : protocoles différents, présence ou non du préfixe http://, mention éventuelle du port, tous les caractères autorisés, les paramètres et les ancres. Ca doit pouvoir se faire ;)
Vous avez rêvé cette nuit ? Partagez vos rêves sur l'Onironaute !
Bijoux fantaisie
Recherche nounou
0

#32 L'utilisateur est hors-ligne   SStephane 

  • Groupe : Fondateur
  • Messages : 425
  • Inscrit(e) : 06-février 09
  • Genre:Homme
  • Localisation:Grabels

Posté 03 septembre 2011 - 14:57

Propre et net :

function compute_string_for_url($str){
  $str = preg_replace('~[^\\pL\d]+~u', '-', $str);
  $str = trim($str, '-');
  $str = iconv('utf-8', 'us-ascii//TRANSLIT', $str);
  $str = strtolower($str);
  $str = preg_replace('~[^-\w]+~', '', $str);
  return $str;
}


0

#33 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é 04 septembre 2011 - 10:22

Je testerai, ça a l'air bien plus simple que la mienne.
Que fait la première regex ?
Vous avez rêvé cette nuit ? Partagez vos rêves sur l'Onironaute !
Bijoux fantaisie
Recherche nounou
0

#34 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é 05 septembre 2011 - 09:49

Je viens de tester, et effectivement ta fonction est géniale !
Je n'arrive pas à la faire fonctionner en partant d'une chaîne en ISO, par contre.
Vous avez rêvé cette nuit ? Partagez vos rêves sur l'Onironaute !
Bijoux fantaisie
Recherche nounou
0

#35 L'utilisateur est hors-ligne   SStephane 

  • Groupe : Fondateur
  • Messages : 425
  • Inscrit(e) : 06-février 09
  • Genre:Homme
  • Localisation:Grabels

Posté 08 septembre 2011 - 14:44

Hello, la première remplace tout ce qui n'est pas unicode et numérique en '-'

C'est quoi l'iso déjà ? ;)
Plus sérieusement => mb_convert_encoding()

Je ne modifie pas les entités html, je n'en vois pas l'intérêt mais ta fonction le fait très bien et mixer les 2 dans ces cas là peut être nécessaire.
0

#36 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é 08 septembre 2011 - 15:16

Effectivement, pas besoin de convertir les entités HTML : ta fonction iconv est géniale pour ça, je ne connaissais pas du tout cette utilisation !
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)