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 :

Liste à puce existante dans mysql


Sujet :

Langage PHP

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre éclairé
    Homme Profil pro
    Administrateur systèmes et réseaux
    Inscrit en
    Mai 2008
    Messages
    240
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 45
    Localisation : France, Rhône (Rhône Alpes)

    Informations professionnelles :
    Activité : Administrateur systèmes et réseaux

    Informations forums :
    Inscription : Mai 2008
    Messages : 240
    Par défaut Liste à puce existante dans mysql
    Bonjour à tous,

    J'ai dans un champ mysql de type text une liste à puce :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    • blablalal
    • efdsfsdf
    • dfsfrezer
    ...
    Avec le debuggeur de firefox le code donne :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    • efdsfsdft• dfsfrezer
    Ces données proviennent d'une autre base et sont importés directement sans passer par php et bien sûr je n'ai pas la main dessus donc pas le choix je dois composer avec.

    Lorsque je les affiches sur mon site la puce disparaît ainsi que les retours à la ligne. J'ai essayé avec nl2br, htmlspecialchars, utf8_encode mais rien à faire, les puces et les retours à la lignes disparaissent alors que les caractères accentués eux s'affichent correctement après le passage de utf8_encode. Si je consulte ma table et ce champ par phpmyadmin l'affichage est correct.

    Est-ce qu'il y a une solution ?
    Merci d'avance.

  2. #2
    Membre éprouvé
    Homme Profil pro
    Webmaster - Développeur/intégrateur web
    Inscrit en
    Septembre 2011
    Messages
    210
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 40
    Localisation : France, Jura (Franche Comté)

    Informations professionnelles :
    Activité : Webmaster - Développeur/intégrateur web
    Secteur : Conseil

    Informations forums :
    Inscription : Septembre 2011
    Messages : 210
    Par défaut
    Citation Envoyé par flipflip Voir le message
    les puces et les retours à la lignes
    Ouaip c'est bizarre... que donne le debug de ce qui est retourné par la fonction qui récupère le résultat en base (ça doit être quelque chose comme PDOStatement::fetch()...) ?

    Je pense que ce serait intéressait d'un faire juste un "var_dump" de la valeur à la sortie de la fonction afin de constater la différence avec l'affichage de la valeur dans un contexte "HTML fini".

  3. #3
    Membre éclairé
    Homme Profil pro
    Administrateur systèmes et réseaux
    Inscrit en
    Mai 2008
    Messages
    240
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 45
    Localisation : France, Rhône (Rhône Alpes)

    Informations professionnelles :
    Activité : Administrateur systèmes et réseaux

    Informations forums :
    Inscription : Mai 2008
    Messages : 240
    Par défaut
    Bonjour,
    Désolé pour le temps de réponse.

    Donc le var_dump me donne :
    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
     
    array(1) {
      [0]=>
      array(37) {
        ["itmref"]=>
        string(7) "xxxxxxx"
        ["libelleMarketing"]=>
        string(35) "xxxxxxx"
        ["gamme"]=>
        string(18) "OUTILLAGE_FIXATION"
        ["plusProduit"]=>
        string(220) "Poignée inversée et technologie HIGH START, compatible avec agrafes de type G de 6, 8, 10, 12 et 14 mm et pointes de 12 et 15 mm, fenêtre de visualisation, revêtement en nylon composite, puissance de frappe réglable"
        ["donneesTechniques"]=>
        string(223) "• Poignée inversée et technologie High Start• Compatible avec agrafes de type G de 6, 8, 12 et 12 mm et pointes de 12 et 15 mm• Fenêtre de visualisation• Revêtement en nylon composite• Puissance de frappe réglable"
    [...]
    Sur le forum les caractères puces et retour à la ligne sont transformés, du coups je joint une capture d'écran.

    Nom : Capture d’écran du 2020-11-02 15-29-42.png
Affichages : 154
Taille : 21,3 Ko

    Et lorsque je vrai gratter directement dans la base par le client mysql j'obtiens
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    � Poign�e invers�e et technologie High Start� Compatible avec agrafes de type G de 6, 8, 12 et 12 mm et pointes de 12 et 15 mm� Fen�tre de visualisation� Rev�tement en nylon composite� Puissance de frappe r�glable
    Et dans le header de ma page html j'ai comme encodage :
    Lorsque je fais un
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    mb_detect_encoding($pim[0]['donneesTechniques']);
    J'obtiens : UTF-8

    Le pire du pire est que lorsque j'affiche les données de ma table en passant par phpmyadmin j'ai bien les puces qui s'affichent.

    Je trouve étonnant que le forum interprète correctement le caractère 0095 mais de mon côté pas moyen

  4. #4
    Membre éprouvé
    Homme Profil pro
    Webmaster - Développeur/intégrateur web
    Inscrit en
    Septembre 2011
    Messages
    210
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 40
    Localisation : France, Jura (Franche Comté)

    Informations professionnelles :
    Activité : Webmaster - Développeur/intégrateur web
    Secteur : Conseil

    Informations forums :
    Inscription : Septembre 2011
    Messages : 210
    Par défaut
    Alors je ne sais pas si ça a un rapport , mais ça me rappel une galère que j'ai eu récemment avec des caractères accentués qui étaient mal décodés au moment de la sortie finale (de l'affichage du HTML final).

    Cela venait de l'utilisation d'une fonction PHP de transformation de chaine de caractère, en l'occurrence "strtoupper()".
    Je ne sais pas précisément pour qu'elle raison mais lorsque je l'ai remplacé par "mb_strtoupper()", je n'avais plus le problème.

    Est-ce que par hasard ta chaine de caractère ne serait pas traitée par une fonction de ce genre entre la sortie de la base et l'affichage en HTML ?

    Sinon, qu'est ce que ça donne si tu fait une page HTML avec pour la partie <head> le contenu de ta head et pour la partie Body, juste le texte issue de la base ?

  5. #5
    Membre éclairé
    Homme Profil pro
    Administrateur systèmes et réseaux
    Inscrit en
    Mai 2008
    Messages
    240
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 45
    Localisation : France, Rhône (Rhône Alpes)

    Informations professionnelles :
    Activité : Administrateur systèmes et réseaux

    Informations forums :
    Inscription : Mai 2008
    Messages : 240
    Par défaut
    Merci de ta piste, il y avait bien un traitement mais qui devait intervenir uniquement si le codage est différent de utf-8
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    	public function utf8_converter($array) {
    		array_walk_recursive($array,
    			function(&$item, $key) {
    				if(!mb_detect_encoding($item, 'utf-8', true)) {
    					$item = utf8_encode($item);
    				}
    			}
    		);
     
    		return $array;
    	}
    Mais j'ai l'impression qu'il y a un bug. En attendant je ne traite plus ma chaîne par cette fonction et j'arrive à
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    � Poign�e invers�e et technologie High Start
    � Compatible avec agrafes de type G de 6, 8, 12 et 12 mm et pointes de 12 et 15 mm
    � Fen�tre de visualisation
    � Rev�tement en nylon composite
    � Puissance de frappe r�glable
    Je suis retourné voir dans phpmyadmin et aucun soucis.

    Nom : Capture d’écran du 2020-11-03 08-25-44.png
Affichages : 144
Taille : 23,4 Ko

    J'ai monté une maquette rapide qui requête la base sans notion de html, d'encode et renvoie le résultat
    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
     
    include __DIR__.'/include/Medoo.php';
    use Medoo\Medoo;
     
    $database = new Medoo([
        'blabal'
    ]);
     
    $data = $database->select('pimitm', "*",
      [
        'itmref' => 'reference'
      ]
    );
     
    print_r($data);
    ?>
    Je peux pas faire plus simple et le résultat est

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    Array
    (
        [0] => Array
            (
                [plusProduit] => Poign�e invers�e et technologie HIGH START, compatible avec agrafes de type G de 6, 8, 10, 12 et 14 mm et pointes de 12 et 15 mm, fen�tre de visualisation, rev�tement en nylon composite, puissance de frappe r�glable
                [donneesTechniques] => � Poign�e invers�e et technologie High Start
    � Compatible avec agrafes de type G de 6, 8, 12 et 12 mm et pointes de 12 et 15 mm
    � Fen�tre de visualisation
    � Rev�tement en nylon composite
    � Puissance de frappe r�glable
    [...]
    Les caractères spéciaux sont remplacés par des ? sur fond noir.

    Je continue mes recherches en fouillant du côté de l'origine des données. Elles proviennent d'import réalisé en CSV et ce fichier est issu d'un tableau Excel donc avec tout les caractères spécifiques à l'encodage Microsoft CP1252. Du coups une petite fonction qui va bien
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    	/* ------------------------------------
    	 * Convertir un caractère CP1252 en UTF-8
    	 *
    	 * @param string $str
    	 * @return string
    	 * @access public
    	 --------------------------------------- */
    	 public function convertFromCP1252($str) {
    		 return mb_convert_encoding($str, 'UTF8', 'CP1252');
    	 }
    Reste les retours à la ligne qui ne sont pas encore gérés.

    Dernière édition : il suffit de faire un nl2br pour avoir la gestion des retours à la ligne.

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

Discussions similaires

  1. [MySQL] Liste de champs dans une table MySQL
    Par Are-no dans le forum PHP & Base de données
    Réponses: 2
    Dernier message: 27/04/2007, 11h13
  2. empecher héritage dans liste à puce imbriquées
    Par zamanika dans le forum Mise en page CSS
    Réponses: 2
    Dernier message: 15/03/2007, 15h18
  3. [MySQL] Insertion liste multiple dans mysql
    Par xdoreau dans le forum PHP & Base de données
    Réponses: 10
    Dernier message: 13/02/2007, 11h44
  4. [HTML] saut de ligne dans liste à puce.
    Par spirou dans le forum Balisage (X)HTML et validation W3C
    Réponses: 6
    Dernier message: 24/08/2005, 20h07
  5. Importer une db existante dans mysql
    Par Arbisis dans le forum SQL Procédural
    Réponses: 2
    Dernier message: 19/02/2004, 17h02

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