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......)
Ah ah ah ah ah...![]()
Alain AKA Arma
Dernière modification par Crazy (27/02/2009 11:19:17)
Hors ligne
</edit>
</edit>Hors ligne
@ Sarcrazy --> Tu es [Pour ne pas infliger une plus grande torture mentale à Crazy, ce mot a été édité] !
CDB !
Alain AKA Arma
Hors ligne
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)
Hors ligne
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(**)![]()
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)
(**) Eh oui, c'est vraiment une particularité "PHP border-line"...
...
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)
$texte = preg_replace("!\\'!","'", $texte); // Suppression des \ excédentaires devant les 'Donc ce code est bien naze ! ![]()
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)
Hors ligne
Tiens, cela me fait penser à autre chose...
Comment remplacer des caractères "SPACE" par un espace ?
Tout simplement comme ceci :
$texte = preg_replace("![[:space:]]+!",' ',$texte);Idem pour remplacer ".." ou "..... (etc.)" par "..." :
$texte = preg_replace("!\.\.+!",'...',$texte);Là, le preg_replace() convient bien...
...![]()
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
Autre info : [:blank:] = espace ou tabulation ![]()
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 ![]()
Hors ligne
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![]()
![]()
)
Maintenant, cela doit être assez clair, non ?
(il y a quelque chose d'ésotérique dans le PHP [pourtant, ce n'est pas sorcier])
![]()
Alain AKA Arma
Hors ligne
|
© 2006-2012 / A. G.☺ CiGi€M@®, 1997-2012 |
|
Reproduction totale ou partielle strictement interdite Contact : / |