Problème fonction URL compatible.

  • Auteur de la discussion Auteur de la discussion Eremes
  • Date de début Date de début
Nouveau WRInaute
Bonsoir.

Voilà, sur mon forum, j'ai récemment fait en sorte que l'url des topics aient le titre du topic dans l'URL. Le problème, c'est que les lettre a accents ne sont pas transformées en lettres simples mais sont remplacées par des tirets. :(

Voilà la fonction que j'utilise :

Code:
	// Formate un texte pour le transformer en URL-compatible
	function formatLink($string,$majuscules=false) {
	$string = strtr($string,
        'ŠŽšžŸÀÁÂÃÄÅÇÈÉÊËÌÍÎÏÑÒÓÔÕÖØÙÚÛÜÝàáâãäåçèéêëìíîïñòóôõöøùúûüýÿ?$,&:()!{}."§_#=/\\;°',
        'szszyaaaaaaceeeeiiiinoooooouuuuyaaaaaaceeeeiiiinoooooouuuuyy---------------------');
	$string = strtr($string,
        array('Þ' => 'TH', 'þ' => 'th', 'Ð' => 'DH', 'ð' => 'dh', '@'=>'-at-',
          'ß' => 'ss', 'Œ' => 'OE', 'œ' => 'oe', 'Æ' => 'AE',
          'æ' => 'ae', 'µ' => 'u', '+' => '-', 'amp' => 'et'));
    $string = preg_replace('|[^A-Z-]|i', '-', $string);
    $string = preg_replace('|[\-]+|i', '-', $string);
    $string = preg_replace('|-$|i', '', $string);
    if(empty($string)) return '-';
    return ($majuscules?$string:strtolower($string));
	}

Des idées ? :(

merci !
 
WRInaute accro
tu as peut-etre un problème autre part comme au niveau de ton fichier .htaccess, tu peux mettre une url qui plante pour voir ? car j'ai testé ta fonction et les accents semblent etre correctement gérer
Code:
<?php echo formatLink("hello_Mr+l'éléphant"); ?>
retourne bien :  hello-mr-l-elephant
 
Nouveau WRInaute
Ok merci pour ta réponse.

Un exemple : topic-1795-1-r-gle-du-forum-de-pr-sentation.html

Peut-être que ça vient de l'encodage en UTF-8 ?

Sinon la ligne de mon .htaccess qui gère ça est :
Code:
RewriteRule ^(.*)-([0-9]+)-([0-9]+)-([a-z0-9A-Z-]+)\.html$ /$1.php?id=$2&page=$3&titre=$4 [L]
 
WRInaute accro
ca doit venir de l'encodage en utf8, re encode en latin, donc decode l'utf8 :)
$url = utf8_decode($url);

tu peux également le mettre directement au début de ta fonction

function formatLink($string,$majuscules=false) {
$string = utf8_decode($string);
...
 
WRInaute discret
oui c'est un problème typique d'encodage ou les lettres accentuées sont représentées par un ? et donc remplacées par un - (la fonction fonctionne donc bien)

la solution de KOogar devrait corriger le problème, tu peux aussi forcer la conversion lors de la connexion à la base de données ça évite de se poser trop de questions, mais ça va influer sur tout ton forum et donc tu risques d'avoir des soucis ailleurs..
 
Nouveau WRInaute
Je vais essayer, mais il me semble avoir déjà essayé, enfin on verra.

Merci pour vos réponses ! :)

Edit : Rah ça marche toujours pas, j'ai placé
Code:
$string = utf8_decode($string);
au début de la fonction, sans succès ...
 
WRInaute discret
as tu essayé de faire un echo de string avant tout traitement ?

il est possible que ta chaine "ŽšžŸÀÁÂÃÄÅÇÈÉÊËÌÍÎÏÑÒÓÔÕÖØÙÚÛÜÝàáâãäåçèéêëìíîïñòóôõöøùúûüýÿ?$,&:()!{}."§_#=/\\;°" aussi soit mal encodée, peut-etre qu'un utf8_decode('ŽšžŸÀÁÂÃÄÅÇÈÉÊËÌÍÎÏÑÒÓÔÕÖØÙÚÛÜÝàáâãäåçèéêëìíîïñòóôõöøùúûüýÿ?$,&:()!{}."§_#=/\\;°") dans le strstr peut regler la chose..
 
Nouveau WRInaute
Merci Sullyvan ! Ca marche a présent, j'ai mis un utf8_decode au début des caractères spéciaux :)

Merci pour ton aide :)
 
Discussions similaires
Haut