Précédent   Forum des professionnels en informatique > PHP > Bibliothèques et frameworks > symfony
symfony Forum d'entraide sur le framework PHP symfony. Avant de poster : cours symfony et FAQ symfony
Partagez cette discussion sur d'autres réseaux sociaux : Viadeo Twitter Google Facebook Digg Delicious MySpace Yahoo
Réponse Proposer ce sujet en actualité
 
Outils de la discussion
Publicité
'
Vieux 10/05/2011, 11h55   #1
Candidat au titre de Membre du Club
 
Homme
Inscription : février 2009
Messages : 44
Détails du profil
Informations personnelles :
Sexe : Homme

Informations forums :
Inscription : février 2009
Messages : 44
Points : 13
Points : 13
Par défaut slugify ne fonctionne pas après hébergement

Salut.

Je suis en train (d'essayer) d'héberger mon site chez 1and1.
Alors que tout fonctionne parfaitement en local, ma fonction 'slugify' ne marche pas à 100% chez 1and1 : les termes accentués sont supprimés

Voici ma fonction slugify (issue du tuto Jobeet)
Code :
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
 
  static public function slugify($text)
  {  
    // Replace non-letters and non-digits with "-" in the string
    $text = preg_replace('#[^\\pL\d]+#u', '-', $text);
 
    // Trim the resulting string
    $text = trim($text, '-');
 
    // Transliterate the resulting string
    if (function_exists('iconv'))
      $text = iconv('utf-8', 'us-ascii//TRANSLIT', $text);
 
    // Make the resulting string lowercase
    $text = strtolower($text);
 
    //Remove unwanted characters from the resulting string
    $text = preg_replace('#[^-\w]+#', '', $text);
 
    // Return "n-a" if the resulting string is empty
    if (empty($text))
      return 'n-a';
 
    return $text;
  }
J'ai débuggé en déplaçant mon "return $text" après chaque opération, et le problème vient de la fonction iconv, qui remplace mes "é" par des "?".
J'en déduis qu'il y a un problème d'encodage, mais dans ce cas, pourquoi est-ce que ça marche en local ??
Ma base de données est bien en utf8.
Bref, je patauge.
Est-ce que quelqu'un a déjà eu (réglé) ce problème ?
Merci d'avance pour votre aide.
plastic1st est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 10/05/2011, 11h58   #2
Membre habitué
 
Homme Ludovic
Étudiant
Inscription : janvier 2011
Messages : 124
Détails du profil
Informations personnelles :
Nom : Homme Ludovic
Localisation : France

Informations professionnelles :
Activité : Étudiant

Informations forums :
Inscription : janvier 2011
Messages : 124
Points : 140
Points : 140
L'hébergeur ne doit pas utiliser utf8 avec PHP, donc la fonction iconv ne fonctionne pas je pense. Il me semble que c'est précisé dans Jobeet.
PeytaWodka est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 10/05/2011, 12h37   #3
Candidat au titre de Membre du Club
 
Homme
Inscription : février 2009
Messages : 44
Détails du profil
Informations personnelles :
Sexe : Homme

Informations forums :
Inscription : février 2009
Messages : 44
Points : 13
Points : 13
Ben... a priori, si, mes pages sont bien encodées en utf8.
D'ailleurs tous les caractères accentués sont affichés correctement sur le reste de ma page. Seules les chaînes reformattées à l'aide de slugify sont incorrectes.
plastic1st est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 10/05/2011, 13h16   #4
Membre habitué
 
Homme Ludovic
Étudiant
Inscription : janvier 2011
Messages : 124
Détails du profil
Informations personnelles :
Nom : Homme Ludovic
Localisation : France

Informations professionnelles :
Activité : Étudiant

Informations forums :
Inscription : janvier 2011
Messages : 124
Points : 140
Points : 140
Voir http://www.symfony-project.org/jobee...Doctrine/fr/08 à l'encadré Vers une meilleure méthode slugify.

Edit : Pardon, j'avais pas vu que c'était adapté chez toi.
PeytaWodka est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 10/05/2011, 13h30   #5
Candidat au titre de Membre du Club
 
Homme
Inscription : février 2009
Messages : 44
Détails du profil
Informations personnelles :
Sexe : Homme

Informations forums :
Inscription : février 2009
Messages : 44
Points : 13
Points : 13
Oui, merci, je connais (et j'ai commencé par retourner sur cette page avant de poster mon message)

Mais ça ne répond pas à ma question.

J'ai ajouté
Code :
1
2
 
<?php echo $_SERVER['HTTP_ACCEPT_CHARSET']; ?>
sur ma page. J'obtiens "ISO-8859-1,utf-8;q=0.7,*;q=0.7 "

Donc le serveur accepte ISO-8859-1 et UTF-8.

Si je n'étais pas en UTF-8, je serais en ISO-8859-1, et donc la modification suivante :
Code :
1
2
 
      $text = iconv('ISO-8859-1', 'us-ascii//TRANSLIT', $text);
permettrait de régler le problème.

or ce n'est pas le cas...
plastic1st est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 10/05/2011, 20h41   #6
Modérateur
 
Avatar de Michel Rotta
 
Homme Michel Rotta
Responsable d'exploitation informatique
Inscription : septembre 2005
Messages : 4 913
Détails du profil
Informations personnelles :
Nom : Homme Michel Rotta
Âge : 49
Localisation : France, Bouches du Rhône (Provence Alpes Côte d'Azur)

Informations professionnelles :
Activité : Responsable d'exploitation informatique
Secteur : Distribution

Informations forums :
Inscription : septembre 2005
Messages : 4 913
Points : 7 505
Points : 7 505
C'est sans doute un peu tard, mais doctrine gère directement les champs slug, sans nécessiter que tu t'en occupe...
__________________
Si tu donnes un poisson à un homme, il mangera un jour. Si tu lui apprends à pêcher, il mangera toujours (Lao Tseu).
  • Pensez à valoriser les réponses pertinantes, cliquez sur le bouton vert +1 pour indiquer votre accord avec la solution proposée.
  • Pensez à utiliser la balise [code] pour afficher du code, elle est cachée sous le bouton [#] dans l'éditeur.
  • Une discussion est terminée ? Alors le bouton est votre ami !
Michel Rotta est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 11/05/2011, 07h06   #7
Candidat au titre de Membre du Club
 
Homme
Inscription : février 2009
Messages : 44
Détails du profil
Informations personnelles :
Sexe : Homme

Informations forums :
Inscription : février 2009
Messages : 44
Points : 13
Points : 13
Ah oui ?
Et ça marche comment ?

@PeytaWodka : Merci pour ton aide.
Finalement, après avoir joué avec l'encodage de mes pages pendant trop longtemps, j'ai finalement modifié un peu ma fonction slugify, en rajoutant :
Code :
1
2
3
4
 
$find    = array("à", "á", "â", "ã", "ä", "å", "ò", "ó", "ô", "õ", "ö", "ø", "è", "é", "ê", "ë", "ç", "ì", "í", "î", "ï", "ù", "ú", "û", "ü", "ÿ", "ñ");  
$replace = 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", "u", "n");  
$text    = str_replace($find, $replace, $text);
C'est moche, mais ça marche, et comme je n'utilise la fonction slugify que pour formatter mes url, je ne suis pas assez motivé pour passer plus de temps sur ce problème ;-)
plastic1st est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 11/05/2011, 08h15   #8
Modérateur
 
Avatar de Michel Rotta
 
Homme Michel Rotta
Responsable d'exploitation informatique
Inscription : septembre 2005
Messages : 4 913
Détails du profil
Informations personnelles :
Nom : Homme Michel Rotta
Âge : 49
Localisation : France, Bouches du Rhône (Provence Alpes Côte d'Azur)

Informations professionnelles :
Activité : Responsable d'exploitation informatique
Secteur : Distribution

Informations forums :
Inscription : septembre 2005
Messages : 4 913
Points : 7 505
Points : 7 505
Pour info :
Code :
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
#shema.yml  (non testé)
Matable:
  actAs:
    sluggable:
      fileds: [ champ1, champ3 ]
      # paramètres (valeurs par défaut)
      name: slug
      alias: null
      type: string
      lenght: 255
      options: []
      uniqueBy: []
      uniqueIndex: true
      builder: [Doctrine_Inflector, urlize]
      provider: ''
      indexName: ''
      unique: true
      canUpDate: false
  columns:
    champ1: 
      type: string(50.)
      notNull: true
    champ2: string(40)
    champ3: date
    champ4: string(250)
    ...
A noter que les objets d'accès aux données (sfDoctrineRoute) et les outils qui vont avec (url_for(),...) permettent alors d'utiliser indifféremment l'Id ou le slug pour désigner un enregistrement dans une table et que le changement ce fait dans la description de l'url de la route. Simple, non ?

Par contre, ceci ne peut fonctionner que pour un slug stocké, ce qui n'est pas ton cas, donc, cela ne peut pas marcher.
__________________
Si tu donnes un poisson à un homme, il mangera un jour. Si tu lui apprends à pêcher, il mangera toujours (Lao Tseu).
  • Pensez à valoriser les réponses pertinantes, cliquez sur le bouton vert +1 pour indiquer votre accord avec la solution proposée.
  • Pensez à utiliser la balise [code] pour afficher du code, elle est cachée sous le bouton [#] dans l'éditeur.
  • Une discussion est terminée ? Alors le bouton est votre ami !
Michel Rotta est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 11/05/2011, 08h25   #9
Candidat au titre de Membre du Club
 
Homme
Inscription : février 2009
Messages : 44
Détails du profil
Informations personnelles :
Sexe : Homme

Informations forums :
Inscription : février 2009
Messages : 44
Points : 13
Points : 13
Ah oui, J'avais pas compris que tu faisais allusion à schema.yml.

J'utilise des champs slug (qui fonctionnent très bien, du reste!).
Mais bon, dans mon cas, c'est surtout le formatage des urls qui posait problème.

Merci pour ton aide !!
plastic1st est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 11/05/2011, 10h13   #10
Modérateur
 
Avatar de Michel Rotta
 
Homme Michel Rotta
Responsable d'exploitation informatique
Inscription : septembre 2005
Messages : 4 913
Détails du profil
Informations personnelles :
Nom : Homme Michel Rotta
Âge : 49
Localisation : France, Bouches du Rhône (Provence Alpes Côte d'Azur)

Informations professionnelles :
Activité : Responsable d'exploitation informatique
Secteur : Distribution

Informations forums :
Inscription : septembre 2005
Messages : 4 913
Points : 7 505
Points : 7 505
J'ai bien vu.

Par contre, le slug sert essentiellement à formater des url...

D'où mon premier réflexe.

Ensuite il pourrait être intéressant de démonter l'objet pour voir comme lui a résolut le problème de slug a travers celui des charset.
__________________
Si tu donnes un poisson à un homme, il mangera un jour. Si tu lui apprends à pêcher, il mangera toujours (Lao Tseu).
  • Pensez à valoriser les réponses pertinantes, cliquez sur le bouton vert +1 pour indiquer votre accord avec la solution proposée.
  • Pensez à utiliser la balise [code] pour afficher du code, elle est cachée sous le bouton [#] dans l'éditeur.
  • Une discussion est terminée ? Alors le bouton est votre ami !
Michel Rotta est déconnecté   Envoyer un message privé Réponse avec citation 00
Réponse Proposer ce sujet en actualité Cette discussion est résolue.
Outils de la discussion



Fuseau horaire GMT +2. Il est actuellement 11h16.


 
 
 
 
Partenaires

Hébergement Web