Supprimer les anti slashes avant la majuscule

WRInaute discret
Bonjour,

J'ai un problème bizarre depuis un sauvegarde de la db en latin plutôt qu'en UTF-8. Quand je m'en suis aperçu, immédiatement en fait, j'ai réinjecté une sauvegarde en utf-8. Le forum s'en est bien sorti les caractères sont redevenus OK mais sur l'annuaire ça ne va pas.
Par exemple ce site :
-http://www.micro-astuce.com/annuaire/site-2524.html
n\'hésitez pas à vous inscrire

Si je corrige la faute via le panneau d'admin de catégorizator elle disparait. C'est pourtant la même table de db qui gère les caractères de l'admin et ceux des personnes qui s'inscrivent sur l'annuaire.

1) Comment réparer bien sûr ?
2) Comment récupérer le coup pour tous les sites déjà inscris ?

Merci de votre lecture.
 
WRInaute discret
Pour m'aider dans mes recherches pensez-vous que je doive essayer de trouver ce dysfonctionnement du côté de la DB ou du côté du script php.
Ce qui est déroutant c'est que quand un site s'inscrit s'il y a une apostrophe dans sa description elle sera convertie en l\'apostrophe dans la base de donnée, mais, en revanche, si depuis l'admin du site je modifie ce caractère via la page modify_site.php le caractère génant disparait, comme je l'explique au dessus.
Peux-t'on en déduire à 100% que c'est le script d'inscription qui bug ?
On pourrait penser que modify_site.php fonctionne alors que submit_site.php débloque quelque part.

NB : Pour ce qui est des anti-slaches déjà présent dans la db, j'ai essayé ce que l'on peut lire ici http://www.asp-php.net/tutorial/asp-php/glossaire.php?glossid=57 , et bien d'autres script js ou php mais rien n'y fait. Les anti-slashe présent s'accrochent à leur apostrophe comme la misère sur le pauvre monde.
Existe t-il une requête sql pour les virer dirctement depuis la base de donnée ?
 
WRInaute discret
Je suis désolé de me répondre à moi même mais la fonction "Editer" n'existe pas sur ce site.
En fait c'est bon, j'ai désactivé magic_quote via le htaccess pour le répertoire concerné, je pensais pourtant que le problème venait de la db.
Donc de ce côté là c'est réglé.
Entre paranthése il est sympa ce script pour savoir si magic_quote est activé ou pas :
Code:
<?php 
if(get_magic_quotes_gpc()) 
  echo "Magic quotes est activé"; 
else 
  echo "Magic quotes est désactivé"; 
?>
Source : http://www.phpsources.org/tutoriel-magicquotes.htm

Il ne me reste plus qu'à réparer la base de donnée afin d'enlever les \ devant les '.
Et là je n'utiliserai pas de requête "delete" sans l'avis de quelqu'un de bon conseil.
Merci
 
WRInaute accro
Tu as désactivé les magic quotes => c'est bien (magic quotes are evil).

Dans ta base de donnée, les \ devant les ', c'est normal il en faut au moins un.
Le problème c'est si tu en as plus: \\'

n\'hésitez pas à vous inscrire
C'est surement un double antislash.
Si tu veux faire une requête SQL pr corriger tout ça, tu n'a pas de delete à faire, juste un update.
 
WRInaute discret
Ah ben là je suis pas sûr du tout. :lol:
T'as pas plus simple, ou juste un exemple de requête pour mon cas de moi. :wink:
 
WRInaute accro
Non je n'ai pas ça sous la main, et pas envie de te donner du code à l'aveuglette / pas testé :mrgreen:
 
WRInaute accro
Combien d'enregistrements seraient concernés par ce double-antislash ?
Une petite boucle php pourrait te régler ça en quelques minutes à peine...
 
WRInaute accro
Comme tu sais pas combien ont merdouillé et avec quelle ampleur (des triple slashe ...), moi je la jouerai 'bucheron' :

tu boucles sur toute la table concerné et pour les champs concernés sans pitié :

1 - un stripslashes
2 - suivi d'un addslashes

Comme ca t'es sur que le ménage est bien fait et que les caractères qui doivent avoir un \ l'ont bien. :wink: (zecat alias zebourrin) :mrgreen:

PS : Vi vi Denis, je me suis mis a Mysql :roll: depuis 1 mois ... Tout arrive, il va même peut être neiger à Marrakech :mrgreen:
 
WRInaute accro
S'il neige à Marrakech, je m'invite chez toi.

Pour continuer sur la lancée, une petite boucle qui va chercher les entrées contenant "//" (donc les doubles, triples, et autres uples slashes), un petit while(eregi("[/]{2,}", $string))*, un petit replace(), et un petit UPDATE... et le tour est joué ;)



* syntaxe à vérifier
 
WRInaute accro
HawkEye a dit:
S'il neige à Marrakech, je m'invite chez toi.
Bon la on a encore un peu de marge (on doit etre a 26/27 à l'ombre l apres midi) :roll:

Question de PHPrank1 : pourquoi tu t'embarrase d'un while alors que le strip le fait d'un seul coup (je sais, j'ai testé par force vu le boxon que j'avais semé dans mes champs :mrgreen: :mrgreen: ) ? je pige pas ?
 
WRInaute discret
Bonjour,

Il ya 2505 enregistrements, ils ne sont pas tous concernés car les premiers s'enregistraient normalement. Mais il y a 2505 enregistrement en tout.
 
WRInaute discret
Ben y'a du monde !! :D
Mais c'est justement comment je le fait le :

tu boucles sur toute la table concerné et pour les champs concernés sans pitié :

1 - un stripslashes
2 - suivi d'un addslashes

Depuis un fichier.php ou directement depuis la db ?

Le problème se pose sur la table "sites_annuaire" au niveau de "$description" puis de "$description_c"
 
WRInaute discret
En fait je donne la soluce, apportée par le siteduzero, au cas où quelqu'un aurait le même problème que moi :

Code:
UPDATE la_table SET la_colonne = REPLACE(la_colonne, '\\', '');

Ca fonctionne parfaitement.

Merci à tous de vous être penchés sur le problème.
 
Discussions similaires
Haut