IdentifiantMot de passe
Loading...
Mot de passe oublié ?Je m'inscris ! (gratuit)
Navigation

Inscrivez-vous gratuitement
pour pouvoir participer, suivre les réponses en temps réel, voter pour les messages, poser vos propres questions et recevoir la newsletter

Langage PHP Discussion :

Rewiter en UFT-8 c'est différend de l'ISo ?


Sujet :

Langage PHP

  1. #1
    Membre régulier
    Homme Profil pro
    HobbyWeb
    Inscrit en
    Janvier 2005
    Messages
    183
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 53
    Localisation : Suisse

    Informations professionnelles :
    Activité : HobbyWeb

    Informations forums :
    Inscription : Janvier 2005
    Messages : 183
    Points : 102
    Points
    102
    Par défaut Rewiter en UFT-8 c'est différend de l'ISo ?
    Bonjour,

    J'ai décidé de refaire mon site en UFT-8 et je sèche sur de l'url rewriting, les accents passents pas.

    Ma bd est bien en UFT-8, l'interclassement également
    j'ai ajouté
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    <?php header('Content-type: text/html; charset=utf-8'); ?>
    dans mon en-tête
    j'ai ajouté
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    mysql_query('SET NAMES utf8');
    après ma connexion

    mon code pour rewriter... après mon appel à ma bd
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    <?php
     
    while($ligne = mysql_fetch_array($result))
    {
    $idcatrw = $ligne["id"];
    $titre = $ligne["titre"];
     
    // +------ accent + espace pour le rewrite.. -------+
     
    $titre2= strtr($titre,"ÀÁÂÃÄÅàáâãäåÒÓÔÕÖØòóôõöøÈÉÊËèéêëÇçÌÍÎÏìíîïÙÚÛÜùúûüÿÑñ","AAAAAAaaaaaaOOOOOOooooooEEEEeeeeCcIIIIiiiiUUUUuuuuyNn"); 
    $titre2 =  trim(preg_replace('@([^a-z|A-Z|0-9|-])+@', '-', strtolower($titre2)), "-");
    $titre2 = preg_replace('@([-])+@', '-', $titre2);	  
     
    $i++;
    .....
    }
    ?>
    Si j'affiche le titre ($titre), j'ai ceci "Jeux à télécharger" qui s'affiche correctement.

    Si je vais pour cliquer cette valeur "$titre2.html" , j'ai cet affichage
    jeux-no-tn-ln-charger.html en lieu et place de jeux-a-telecharger.html

    Avez-vous une idée de ce que j'ai oublié ou de ce que je fais faux ?
    (en ISO, tout jouait.. )

    D'avance merci de votre aide
    Cordialement
    Yule

  2. #2
    Expert éminent sénior

    Profil pro
    Inscrit en
    Juin 2002
    Messages
    6 152
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juin 2002
    Messages : 6 152
    Points : 17 778
    Points
    17 778
    Par défaut
    strtr ne peut fonctionner sous cette forme avec un jeu de caractères multi-octets puisqu'elle cherche justement à remplacer un octet par un autre.

    Il faut utiliser sa forme associative ou toute fonction de remplacement (str_replace par exemple) voir $out = iconv('UTF-8', 'ASCII//TRANSLIT', $in);

    PS : à moins d'un remplacement des fonctions de base par mbstring, strtolower est à remplacer par mb_strtolower (pourrait même être à faire en premier - avec un mb_internal_encoding('UTF-8') avant) et preg_replace ne gèrera l'UTF-8 qu'en présence du modificateur u.

  3. #3
    Membre régulier
    Homme Profil pro
    HobbyWeb
    Inscrit en
    Janvier 2005
    Messages
    183
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 53
    Localisation : Suisse

    Informations professionnelles :
    Activité : HobbyWeb

    Informations forums :
    Inscription : Janvier 2005
    Messages : 183
    Points : 102
    Points
    102
    Par défaut
    Re,

    Ok mais je le remplace par quoi ? un preg ?

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
     
    $titre2= preg_replace('ÀÁÂÃÄÅàáâãäåÒÓÔÕÖØòóôõöøÈÉÊËèéêëÇçÌÍÎÏìíîïÙÚÛÜùúûüÿÑñ','AAAAAAaaaaaaOOOOOOooooooEEEEeeeeCcIIIIiiiiUUUUuuuuyNn', $titre);  
    $titre2 =  trim(preg_replace('@([^a-z|A-Z|0-9|-])+@', '-', strtolower($titre2)), "-");
    $titre2 = preg_replace('@([-])+@', '-', $titre2);
    l'url de redirection ($index2.html) n'affiche plus rien.. arghh rire

  4. #4
    Modérateur
    Avatar de sabotage
    Homme Profil pro
    Inscrit en
    Juillet 2005
    Messages
    29 208
    Détails du profil
    Informations personnelles :
    Sexe : Homme

    Informations forums :
    Inscription : Juillet 2005
    Messages : 29 208
    Points : 44 155
    Points
    44 155
    Par défaut
    Ok mais je le remplace par quoi ? un preg ?
    Julp te l'a indiqué.
    N'oubliez pas de consulter les FAQ PHP et les cours et tutoriels PHP

  5. #5
    Membre régulier
    Homme Profil pro
    HobbyWeb
    Inscrit en
    Janvier 2005
    Messages
    183
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 53
    Localisation : Suisse

    Informations professionnelles :
    Activité : HobbyWeb

    Informations forums :
    Inscription : Janvier 2005
    Messages : 183
    Points : 102
    Points
    102
    Par défaut
    Citation Envoyé par sabotage Voir le message
    Julp te l'a indiqué.
    oui j'ai vu mais après mon post en l'éditant ;-)

    MErci ! Mais je suis assez limité en connaissance dans ce domaine...

    J'ai donc essayer de comprendre ton message pour l'interpréter comme je le comprends

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    mb_internal_encoding('UTF-8');
    $titre2 = mb_strtolower($titre);
    $titre2= str_replace("àáâãäåòóôõöøèéêëçìíîïùúûüÿñ","aaaaaaooooooeeeeciiiiuuuuyn", $titre2);
    $titre2 = str_replace(' ','-',$titre2);
    L'affichage est bon mais il laisse les caractères accentués.. -> jeux-à-télécharger.html le saliguaud... J'ai oublié une ligne ?

    PS: c'est quoi le modificateur u ?

  6. #6
    Expert éminent sénior

    Profil pro
    Inscrit en
    Juin 2002
    Messages
    6 152
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juin 2002
    Messages : 6 152
    Points : 17 778
    Points
    17 778
    Par défaut
    Ce n'est pas ainsi que str_replace s'utilise. Vous n'avez fait que remplacer une fonction par une autre sans correctement utiliser ses paramètres (forme comprise).

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    $out = str_replace(
        array('à', 'á', 'â', 'ã', 'ä', 'å', 'ò', 'ó', 'ô', 'õ', 'ö', 'ø', 'è', 'é', 'ê', 'ë', 'ç', 'ì', 'í', 'î', 'ï', 'ù', 'ú', 'û', 'ü', 'ÿ', 'ñ'),
        array('a', 'a', 'a', 'a', 'a', 'a', 'o', 'o', 'o', 'o', 'o', 'o', 'e', 'e', 'e', 'e', 'c', 'i', 'i', 'i', 'i', 'u', 'u', 'u', 'u', 'y', 'n'),
        $in
    );
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    $out = strtr(
        $in,
        array(
            'à' => 'a',
            'á' => 'a',
            'â' => 'a',
            # ...
        )
    );

  7. #7
    Membre régulier
    Homme Profil pro
    HobbyWeb
    Inscrit en
    Janvier 2005
    Messages
    183
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 53
    Localisation : Suisse

    Informations professionnelles :
    Activité : HobbyWeb

    Informations forums :
    Inscription : Janvier 2005
    Messages : 183
    Points : 102
    Points
    102
    Par défaut
    Ok merci, je comprend mieux maintenant

    en faisant ainsi (1 lettre à la fois) ça fonctionne mais c'est barbare...

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    mb_internal_encoding('UTF-8');
    $titre2 = mb_strtolower($titre);
    $titre2= str_replace('é','e',$titre2);
    $titre2= str_replace('è','e',$titre2);
    $titre2= str_replace('ê','e',$titre2);
    $titre2= str_replace('ë','e',$titre2);
    $titre2= str_replace('à','a',$titre2);
    $titre2= str_replace('â','a',$titre2);
    $titre2= str_replace('î','i',$titre2);
    $titre2= str_replace('ï','i',$titre2);
    $titre2 = str_replace(' ','-',$titre2);
    Cordialement
    Yule

+ Répondre à la discussion
Cette discussion est résolue.

Discussions similaires

  1. Qu'est ce qu'un grand projet ?
    Par Geronimo dans le forum Débats sur le développement - Le Best Of
    Réponses: 62
    Dernier message: 04/04/2013, 14h52
  2. Quel est le meilleur script PHP de portail (CMS) ?
    Par Lana.Bauer dans le forum EDI, CMS, Outils, Scripts et API
    Réponses: 187
    Dernier message: 18/10/2012, 07h45
  3. Réponses: 13
    Dernier message: 06/07/2011, 17h22
  4. Quelle est la fiabilité du protocole SSL ?
    Par Anonymous dans le forum Développement
    Réponses: 5
    Dernier message: 05/09/2002, 13h31
  5. apprentissage du C est-il necessaire pour C++ ?
    Par Anonymous dans le forum C
    Réponses: 6
    Dernier message: 02/05/2002, 12h56

Partager

Partager
  • Envoyer la discussion sur Viadeo
  • Envoyer la discussion sur Twitter
  • Envoyer la discussion sur Google
  • Envoyer la discussion sur Facebook
  • Envoyer la discussion sur Digg
  • Envoyer la discussion sur Delicious
  • Envoyer la discussion sur MySpace
  • Envoyer la discussion sur Yahoo