Vous n'êtes pas identifié.

Annonces

Les pages de ce Forum sont exploitables par les Navigateurs FireFox, Google Chrome, Opera, Safari, Konqueror, Netscape & MSIE.

#1 [↑] [↓]27/02/2009 10:48:20

Crazy
Super Admin azimuté
Crazy
Lieu: Côte d'Azur - FRANCE
Date d'inscription: 10/04/2006
Messages: 5696
Site web

Supprimer les backslashes excédentaires

C'est une question récurrente sur TOUS (ou presque) les Forums de SEO ou, plus généralement, d'Informatique...

Lors de l'exploitation d'un formuaire, il arrive souvent (après enregistrement) de récupérer des "\'" dans sa BDD. C'est gênant !
Et les élucubrations résultantes sont diverses et variées et, la plupart du temps, totalement ineptes.
Donc, une fois de plus, je me dois de sévir et donner une solution efficace.

Voici le bon code PHP pour obtenir la bonne expression :

Code :

// Suppression des antislashes excédentaires devant les apostrophes
$texte = addslashes(str_replace("\'","'",stripslashes($texte)));

ATTENTION : Surtout, ne pas modifier "\'","'" dans le str_replace() sinon les résultats seront imprévisibles !
(Cela devrait fonctionner quel que soit le magic_quotes_gpc() [ON ou OFF] - Donc, ne pas s'en soucier... whistling ...)

Ah ah ah ah ah...
wink
Alain AKA Arma

Dernière modification par Crazy (27/02/2009 11:19:17)



Je suis Bon (avec un grand C) et Immortel... Jusqu'à preuve du contraire ! - I never die...
Chocoku - Sorcier Glouton - Tiger l'Osmose
MSnBetter ThanGoogle - Black Hattitude

I remember and I feel free! - I am the Killer of the Lambs!

Hors ligne

 

#2 [↑] [↓]27/02/2009 13:41:00

Gollum
L'Oeil du Forum
Gollum
Lieu: Partout ici...
Date d'inscription: 01/01/1970
Messages: 326

Re: Supprimer les backslashes excédentaires

Testé et approuvé !


Eh oui, c'est tout bon...

<edit Le Lutin>     http://forum.cigiema.fr/img/pas-faux.gif     </edit>

<edit Zibou>     http://forum.cigiema.fr/img/trop_bien_dit.gif     </edit>

<edit Sarcrazy> Crazy est quand même un c*n ! </edit>


I am the "Eye of the Web", looking at you, I can read Forum.
I am the Maker of Rules, dealing with Crazy, I can cheat you Blind
And you don't need to see any more, to know that I can write this one...
I can write Forum !

Hors ligne

 

#3 [↑] [↓]27/02/2009 13:45:55

Crazy
Super Admin azimuté
Crazy
Lieu: Côte d'Azur - FRANCE
Date d'inscription: 10/04/2006
Messages: 5696
Site web

Re: Supprimer les backslashes excédentaires

@ Sarcrazy --> Tu es [Pour ne pas infliger une plus grande torture mentale à Crazy, ce mot a été édité] !
CDB !
big_smile
Alain AKA Arma


Je suis Bon (avec un grand C) et Immortel... Jusqu'à preuve du contraire ! - I never die...
Chocoku - Sorcier Glouton - Tiger l'Osmose
MSnBetter ThanGoogle - Black Hattitude

I remember and I feel free! - I am the Killer of the Lambs!

Hors ligne

 

#4 [↑] [↓]27/02/2009 14:18:06

rikaix
Trolleur de 1ère Catégorie
rikaix
Lieu: Aix en Provence
Date d'inscription: 11/04/2006
Messages: 377

Re: Supprimer les backslashes excédentaires

PHP 6.0 devrait remédier à cela, mais en attendant...
Le souci vient souvent des magic quotes (qu'il faut désactiver dans le php.ini) si elle sont activées et que l'on ne prend pas soins de le vérifier dans son code, splitch backslash, normalement cela n'existera plus dans la version 6.0.

De plus, et la c'est une convention de codage, il appartient au goret qui script de préparer ses requêtes sql avant de les stocker dans la BDD,
Des fonctions comme mysql real escape string machin chose et consors sont du coup trés utile...

Voila là les limites du code de goret non maintenable et non réutilisable.

Mais qu'en dit Monsieur PHP (le traitre qui flirte avec IBM) : http://www.php.net/manual/fr/security.magicquotes.php

Dernière modification par rikaix (27/02/2009 14:22:03)



C'est en faisant n'importe quoi, qu'on devient n'importe qui.
(source : R. Gaillard)

Hors ligne

 

#5 [↑] [↓]27/02/2009 14:57:31

Crazy
Super Admin azimuté
Crazy
Lieu: Côte d'Azur - FRANCE
Date d'inscription: 10/04/2006
Messages: 5696
Site web

Re: Supprimer les backslashes excédentaires

Oui oui, tu as raison, il faut désactiver dans php.ini...

Mais en Hébergement Mutualisé, c'est vraiment difficile, voire même déconseillé.
(magic_quotes_gpc(0) ne change rien car très souvent inopérant si fixé à ON dans php.ini)
Ce qui est généralement le cas --> Magic_quotes_gpc "1" PHP_INI_PERDIR (disponible depuis PHP <= 4.2.3)

Cela dit, là n'est pas le PB !

Je parle bien de formulaires dans lesquels il y a le caractère d'échappement (\) qui est souvent présent devant ' (apostrophe).
Et c'est cela qui ne va pas (lors d'un get_meta_tags()(*) par exemple)...
Le code précédent permet d'y remédier !
Elégant et efficace...
Et zarbi(**)
wink
Alain AKA Arma

(*) Etudions le cas suivant (METAS)

Mauvaise syntaxe (avec des \) :

Code :

<title>L\'Annuaire #1 - lol</title>
<meta name="description" content="L\'Annuaire Cigiema - C\'est le plus beau !" />

Bonne syntaxe (sans aucun \) :

Code :

<title>L'Annuaire No 1 - MDR</title>
<meta name="description" content="L'Annuaire Cigiema - C'est le plus beau !" />

Et pourtant, c'est courant (la syntaxe zarbie) sad

(**) Eh oui, c'est vraiment une particularité "PHP border-line"... whistling ...
Mais cela fonctionne bien et c'est tout ce que l'on désire.

PS : En REGEXP [avec preg_replace() seul] --> KO (ne fait rien)

Code :

	$texte = preg_replace("!\\'!","'", $texte); // Suppression des \ excédentaires devant les '

Donc ce code est bien naze ! lol

PPS : D'ailleurs, j'aimerais bien que l'on me dise s'il y a des Hébergements (avec PHP) où cela ne marche pas (ou, éventuellement, plante)


Je suis Bon (avec un grand C) et Immortel... Jusqu'à preuve du contraire ! - I never die...
Chocoku - Sorcier Glouton - Tiger l'Osmose
MSnBetter ThanGoogle - Black Hattitude

I remember and I feel free! - I am the Killer of the Lambs!

Hors ligne

 

#6 [↑] [↓]27/02/2009 15:28:52

Crazy
Super Admin azimuté
Crazy
Lieu: Côte d'Azur - FRANCE
Date d'inscription: 10/04/2006
Messages: 5696
Site web

Re: Supprimer les backslashes excédentaires

Tiens, cela me fait penser à autre chose...

Comment remplacer des caractères "SPACE" par un espace ?
Tout simplement comme ceci :

Code :

$texte = preg_replace("![[:space:]]+!",' ',$texte);

Idem pour remplacer ".." ou "..... (etc.)" par "..." :

Code :

$texte = preg_replace("!\.\.+!",'...',$texte);

Là, le preg_replace() convient bien... whistling ...
cool
Alain AKA Arma

PS : Une interrogation idiote (et stupide) --> [:space:] est inclus dans [:blank:] ou [:blank:] est inclus dans [:space:] ?
Une info : [:space:] = espace ou \n ou \r ou \t neutral
Autre info : [:blank:] = espace ou tabulation happy

PPS : En SQL (avec MySQL, par exemple), peut-on les utiliser avec "LIKE" ?
(oui, je sais, je deviens emmerdant... Mais c'est pour le bien de tous !)

PPPS : Oui - oui, je sais (aussi)... C'est du FLOOD de TROLL...
Mais c'est quand même utile de le savoir tongue


Je suis Bon (avec un grand C) et Immortel... Jusqu'à preuve du contraire ! - I never die...
Chocoku - Sorcier Glouton - Tiger l'Osmose
MSnBetter ThanGoogle - Black Hattitude

I remember and I feel free! - I am the Killer of the Lambs!

Hors ligne

 

#7 [↑] [↓]27/02/2009 17:22:15

Crazy
Super Admin azimuté
Crazy
Lieu: Côte d'Azur - FRANCE
Date d'inscription: 10/04/2006
Messages: 5696
Site web

Re: Supprimer les backslashes excédentaires

Je FLOODE encore...

Pourquoi utiliser "chaîne" ou 'chaîne' dans une fonction telle que preg_replace(), ereg_replace() ou eregi_replace() ?
Parce que :
- Le contenu de "chaîne" est évalué (interprêté) ;
- Celui de 'chaîne' est un littéral (une vulgaire suite de caractères insignifiants).


Est-ce clair ?

Exemples :

Code :

$texte = preg_replace("/([0-9]+)([,])\ ([0-9]+)/","\\1\\2\\3",preg_replace("/([0-9]+)([\.])\ ([0-9]+)/","\\1\\2\\3",$texte));

Cela remplace $1, 000, 000. 00 par $1,000,000.00
Ou
1. 000. 000, 00? par 1.000.000,00?
(si - si, cela fonctionne dans les deux cas)

Et

Code :

$texte = preg_replace_callback(
	"/\.\ (co|gov|gouv|asso|edu|coop|mil|int)\.\ ([A-Za-z]{2})/i",
	create_function('$matches','return strtolower("\.".$matches[1]."\.".$matches[2]."\ ");'),
	preg_replace_callback(
	"/ww([w]?)([0-9]?)\.\ ([A-Za-z0-9\-\_]+)\.\ ([A-Za-z]+)/i",
	create_function('$matches','return strtolower("ww".$matches[1].$matches[2]."\.".$matches[3]."\.".$matches[4]);'),
	$texte));

Cela remplace www. Domaine. Coop. Fr par www.domaine.coop.fr
Ou
subdomain. Domain. Co. Uk par subdomain.domain.co.uk
(il manque quelque chose... C'est juste pour le FuN lol big_smile lol)

Maintenant, cela doit être assez clair, non ?
(il y a quelque chose d'ésotérique dans le PHP [pourtant, ce n'est pas sorcier])

roll
Alain AKA Arma


Je suis Bon (avec un grand C) et Immortel... Jusqu'à preuve du contraire ! - I never die...
Chocoku - Sorcier Glouton - Tiger l'Osmose
MSnBetter ThanGoogle - Black Hattitude

I remember and I feel free! - I am the Killer of the Lambs!

Hors ligne

 

Pied de page des forums

Powered by PunBB modified
© Copyright 2002–2005, Rickard Andersson
© Interface & Functional Add-ons Copyright 2006-2007, by Crazy


RSS Forum CIGIEMA

© 2006-2012 / A. G.
CiGi€M@®, 1997-2012
IDDN Reproduction totale ou partielle strictement interdite
Contact :
/