Publicité
+ Répondre à la discussion
Affichage des résultats 1 à 8 sur 8
  1. #1
    Invité de passage
    Inscrit en
    décembre 2012
    Messages
    4
    Détails du profil
    Informations forums :
    Inscription : décembre 2012
    Messages : 4
    Points : 0
    Points
    0

    Par défaut caractères \ à la place de '

    Bonjour à tous,

    n'étant pas une lumière en informatique mais un simple internaute qui essaye de partager ce qu'il sait dans un domaine particulier, je suis confronté à un souci de taille.

    Je suis parvenu à migrer (apparemment c'est comme cela que ça s'appelle?), un forum Kunena vers SMF (non sans mal). Après avoir fait quelques modifs, tout semble OK sauf un paramètre essentiel que je n'arrive pas à corriger.

    Tous les caractères apostrophe ('), ont été remplacés par \\\. J'ai essayé de "bidouiller" (quand on y connait rien et que ça n'est pas son métier je pense que ça ne peut pas s'appeler autrement lol, je suis toujours au point mort.

    En cherchant, on m'a dit de changer l'encodage de la base de données (elle est en utf8_swedish_ci).

    Comment pourrais-je faire pour que les \\\ soient tous remplacés par le caractère apostrophe (') dans les différentes catégories mais aussi les posts du forum, sans que je me tappe les près de 10000 messages à la main ??

    Je m'en remets à des pros car je crois bien avoir atteint mes limites et être arrivé au bout du bout.

    Encore merci à vous et bonne soirée.

    Cordialement

  2. #2
    Modérateur
    Avatar de CinePhil
    Homme Profil pro Philippe Leménager
    Ingénieur d'études en informatique
    Inscrit en
    août 2006
    Messages
    13 747
    Détails du profil
    Informations personnelles :
    Nom : Homme Philippe Leménager
    Âge : 51
    Localisation : France, Haute Garonne (Midi Pyrénées)

    Informations professionnelles :
    Activité : Ingénieur d'études en informatique
    Secteur : Enseignement

    Informations forums :
    Inscription : août 2006
    Messages : 13 747
    Points : 22 930
    Points
    22 930

    Par défaut

    Donne la structure de la table dans laquelle tu vois ce phénomène et dis dans quelle colonne avec un exemple de données.

    D'une manière générale, il va falloir que tu fasses une requête UPDATE en utilisant REPLACE :
    Code :
    1
    2
    UPDATE la_table
    SET la_colonne = REPLACE(la_colonne, '\\\\\\', '\'')
    Fais quand même une sauvegarde de la table avant car il peut y avoir des effets indésirables selon ce que contient la colonne.
    Philippe Leménager. Ingénieur d'étude à l'École Nationale de Formation Agronomique. Autoentrepreneur.
    Mon blog sur la conception des BDD, le langage SQL, le PHP avec Zend Framework...
    « Ce que l'on conçoit bien s'énonce clairement, et les mots pour le dire arrivent aisément ». (Nicolas Boileau)
    À la maison comme au bureau, j'utilise la suite Linux Mageïa !

  3. #3
    Invité de passage
    Inscrit en
    décembre 2012
    Messages
    4
    Détails du profil
    Informations forums :
    Inscription : décembre 2012
    Messages : 4
    Points : 0
    Points
    0

    Par défaut

    Bonsoir CinePhil et avant tout merci pour ton aide

    Voici les informations dont tu as besoin (j’espère que je ne vais pas me planter):

    Nom de la table: phpbb3_posts

    Les colonnes contenant les caractères comme (\') au lieu de simplement (') ou (\\\) au lieu de (') sont:

    post_subject
    post_text


    Encore un grand merci à toi pour le temps que tu consacres à mon problème.

    Bonne soirée à toi.

    Cordialement.

  4. #4
    Modérateur
    Avatar de CinePhil
    Homme Profil pro Philippe Leménager
    Ingénieur d'études en informatique
    Inscrit en
    août 2006
    Messages
    13 747
    Détails du profil
    Informations personnelles :
    Nom : Homme Philippe Leménager
    Âge : 51
    Localisation : France, Haute Garonne (Midi Pyrénées)

    Informations professionnelles :
    Activité : Ingénieur d'études en informatique
    Secteur : Enseignement

    Informations forums :
    Inscription : août 2006
    Messages : 13 747
    Points : 22 930
    Points
    22 930

    Par défaut

    Petit test...
    J'ai inséré les valeurs suivantes dans une table de test :
    1) Colonne titre : L'apostrophe précédée d'un antislash : \'
    2) Colonne resume : Et trois antislashes + une apostrophe : \\\'

    Dans phpMyAdmin, les valeurs s'affichent correctement.

    Code :
    1
    2
    SELECT REPLACE(titre, '\\', '') 
    FROM la_table
    Résultat : L'apostrophe précédée d'un antislash : '
    => L'antislash a été supprimé.

    Même requête sur la colonne resume...
    Résultat : Et trois antislashes + une apostrophe : '
    => Toutes les antislashes ont disparu.

    Mais dans un message phpBB, tu peux avoir des balises fermantes de ce style : [\balisefermante] et là il ne faut pas supprimer l'antislash !

    Donc je te conseillerais cette requête :
    Code :
    1
    2
    3
    UPDATE phpbb3_posts
    SET post_subject = REPLACE(post_subject, '\\\'', '\''),
    	post_text = REPLACE(post_text, '\\\'', '\'')
    L'antislash est un caractère d'échappement. Dans le code ci-dessus, le premier et le troisième antislashes sont là pour échapper le caractère qui suit : un antislah puis une apostrophe.

    Encore une fois, sauvegarde avant d'exécuter !

    Tu peux aussi faire un SELECT avant pour vérifier ce qui va être effectué comme opération.
    Philippe Leménager. Ingénieur d'étude à l'École Nationale de Formation Agronomique. Autoentrepreneur.
    Mon blog sur la conception des BDD, le langage SQL, le PHP avec Zend Framework...
    « Ce que l'on conçoit bien s'énonce clairement, et les mots pour le dire arrivent aisément ». (Nicolas Boileau)
    À la maison comme au bureau, j'utilise la suite Linux Mageïa !

  5. #5
    Invité de passage
    Inscrit en
    décembre 2012
    Messages
    4
    Détails du profil
    Informations forums :
    Inscription : décembre 2012
    Messages : 4
    Points : 0
    Points
    0

    Par défaut

    Bonsoir Cinephil,

    Désolé de te répondre aussi tard (j'ai dû me consacrer à d'autres activités moins passionnantes et ça m'a mis en retard sur mon problème avec MySql). En testant tes bons conseils, ça m'a beaucoup aidé et j'ai pu constater que ta solution marchait parfaitement bien. Par contre j'aurais encore une dernière question à te poser:

    Lorsque j'exécute la requete suivante:

    Code :
    1
    2
    UPDATE smf_messages
    SET body = REPLACE(body, '\\\'', '\'')
    La requete s'effectue parfaitement bien mais j'ai par exemple encore des intitulés restant avec non pas cette fois-ci \\\' (trois anti-slashs avec une apostrophe) mais \\' (2 anti-slashs avec une apostrophe). Quand j'exécute la requete suivante:

    Code :
    1
    2
    UPDATE smf_categories
    SET name = REPLACE(name, '\\\\'', '\'')
    (ici j'essaye de remplacer \\' par '), j'ai le message d'erreur suivant:

    #1064 - You have an error in your SQL syntax; check the manual that corresponds to your MariaDB server version for the right syntax to use near '\'')' at line 2


    Aurais-tu une idée concernant ce problème (j'ai cherché de mon coté mais sans succès malheureusement). Encore merci pour tou et je te souhaite de bonnes fêtes de fin d'année !

  6. #6
    Modérateur
    Avatar de CinePhil
    Homme Profil pro Philippe Leménager
    Ingénieur d'études en informatique
    Inscrit en
    août 2006
    Messages
    13 747
    Détails du profil
    Informations personnelles :
    Nom : Homme Philippe Leménager
    Âge : 51
    Localisation : France, Haute Garonne (Midi Pyrénées)

    Informations professionnelles :
    Activité : Ingénieur d'études en informatique
    Secteur : Enseignement

    Informations forums :
    Inscription : août 2006
    Messages : 13 747
    Points : 22 930
    Points
    22 930

    Par défaut

    Il te manque un antislash dans ce qu'il faut remplacer :
    Code :
    1
    2
    UPDATE smf_categories
    SET name = REPLACE(name, '\\\\\'', '\'')
    1er antislash échappe un antislash.
    3ème antislash échappe le second antislash.
    5ème antislash échappe l'apostrophe.
    Le tout est remplacé par une apostrophe.
    Philippe Leménager. Ingénieur d'étude à l'École Nationale de Formation Agronomique. Autoentrepreneur.
    Mon blog sur la conception des BDD, le langage SQL, le PHP avec Zend Framework...
    « Ce que l'on conçoit bien s'énonce clairement, et les mots pour le dire arrivent aisément ». (Nicolas Boileau)
    À la maison comme au bureau, j'utilise la suite Linux Mageïa !

  7. #7
    Invité de passage
    Inscrit en
    décembre 2012
    Messages
    4
    Détails du profil
    Informations forums :
    Inscription : décembre 2012
    Messages : 4
    Points : 0
    Points
    0

    Par défaut

    Hello Cinephil,

    merci à toi pour totues ces explications elles m'ont permise de résoudre ce problème d'anti-slash qui me pourrissaient la vie (et en plus j'ai appris plein de choses grace à toi) !!

    Par contre j'aurais une dernière question à te poser:

    je suis passé à la seconde étape de ma migration et j'ai un problème qui ressemble trait pour trait à celui que je viens de rencontrer. Mes caractères accentués ont été remplacés par des caractères du style é ou autre. J'ai bien entendu utiliser les commandes que tu m'avais apprise avec par exemple la commande suivante (pour changer les é en é -e accent aigu).

    Code :
    1
    2
    UPDATE phpbb_posts
    SET post_subject = REPLACE(post_subject, '\\é\\', '\é')
    La commande fonctionne parfaitement, mais un message me dit qu'aucune ligne n'a été affectée alors qu'il y a bien dans ma colonne "post-subject" des caractères à remplacer.

    Aurais-tu une idée d'ou cela pourrait venir (ou encore peut-être une façon globale de traiter mon souci) ?

    Encore merci pour toute ton aide et bonne année avec un peu d'avance !

  8. #8
    Modérateur
    Avatar de CinePhil
    Homme Profil pro Philippe Leménager
    Ingénieur d'études en informatique
    Inscrit en
    août 2006
    Messages
    13 747
    Détails du profil
    Informations personnelles :
    Nom : Homme Philippe Leménager
    Âge : 51
    Localisation : France, Haute Garonne (Midi Pyrénées)

    Informations professionnelles :
    Activité : Ingénieur d'études en informatique
    Secteur : Enseignement

    Informations forums :
    Inscription : août 2006
    Messages : 13 747
    Points : 22 930
    Points
    22 930

    Par défaut

    Ça c'est un problème de collation de caractères.

    Si tu es sur de la correspondance de chaque signe, tu peux procéder en masse comme précédemment mais cette fois tu n'as pas besoin des antislashes.

    Code :
    1
    2
    UPDATE phpbb_posts
    SET post_subject = REPLACE(post_subject, 'é', 'é')
    Vérifie quand même en faisant un SELECT en mode console que ce n'est pas juste un problème d'affichage.
    Philippe Leménager. Ingénieur d'étude à l'École Nationale de Formation Agronomique. Autoentrepreneur.
    Mon blog sur la conception des BDD, le langage SQL, le PHP avec Zend Framework...
    « Ce que l'on conçoit bien s'énonce clairement, et les mots pour le dire arrivent aisément ». (Nicolas Boileau)
    À la maison comme au bureau, j'utilise la suite Linux Mageïa !

Liens sociaux

Règles de messages

  • Vous ne pouvez pas créer de nouvelles discussions
  • Vous ne pouvez pas envoyer des réponses
  • Vous ne pouvez pas envoyer des pièces jointes
  • Vous ne pouvez pas modifier vos messages
  •