str_replace qui ne marche pas quand les données viennent de MySQL
Bonsoir,
un petit problème qui me bloque depuis quelques jours déjà :)
Dans Spip, dans un squelette, je fait appel a une table d'un forum IPB 2.3. J'affiche des donnée, un coup de utf8_encode et c'est nickel
seulement, il m'est impossible de faire un str_ireplace("style_emoticons/<#EMO_DIR#>" ,'../ipb/style_emoticons/default' ,$contenu );
le <#EMO_DIR#> n'est jamais trouvé
alors que si je rempli $contenu en dur, avec un <#EMO_DIR#> dedans, il est remplacé
j'ai essayé de mettre un utf8_encode avant le replace mais ça change rien
qu'est ce que je pourrais faire pour que les données de la base soit "nettoyé" et que mon replace fonctionne ? :/
Peut être une fonction MySQL ? nan je sais vraiment pas quoi faire.
Merci d'avance.
http://damienalexandre.fr/
Attention, ce n'est pas un "<#EMO_DIR#>" que tu cherches à remplacer, mais un "style_emoticons/<#EMO_DIR#>".
Non ?
Sinon, pour être sur de ton coup, en debug, fais un echo de ton truc juste avant le str_ireplace, tu verras bien ce qu'il contient.
Oui c'est bien "style_emoticons/<#EMO_DIR#>" que je recherche,
seulement le <#EMO_DIR#> fait "planter" le replace.
Je suis absolument certain que la chaine que je test comporte un "style_emoticons/<#EMO_DIR#>", seulement PHP ne le trouve pas, d'ou ce sujet (parce que je ne vois vraiment pas pourquoi ça ne marcherai pas...).
Existe t'il des fonction MySQL pour nettoyer les donnée ? Les caractéres <> et # ne serait il pas interdit ?
Merci.
http://damienalexandre.fr/
Existe t'il des fonction MySQL pour nettoyer les donnée ? Les caractéres <> et # ne serait il pas interdit ?
Non, c'est autorisé.
Je suis absolument certain que la chaine que je test comporte un "style_emoticons/<#EMO_DIR#>"
As tu fais un echo de ta chaine ?
Oui oui oui,
nan mais je suis sur de moi mon code est parfait ^^
J'ai fait un echo, on y trouve bien le "style_emoticons/<#EMO_DIR#>" que je veut remplacer,
j'ai copier coller le resultat du echo dans $contenu, (en écrasant les données précedentes) et le replace marche nickel !
Donc, quand c'est en dur ça marche, quand ça vient de la base de donnée ça marche pas :/ D'ou mon problème.
J'ai d'autre tests qui passent aussi à la trappe,
$contenu =preg_replace ('#target=\'_blank\'>(.*?)</a>#is' ,'title="\\1">\\1</a>' ,$contenu );
$contenu =preg_replace ('!border=\'(.*?)\'!is' ,'' ,$contenu );
alors qu'un str_replace('a', 'b', $contenu) fonctionne :/
Pour moi ça vient des données de la base, leur format ou je ne sais quoi :(
http://damienalexandre.fr/
Ben tu as l'air de dire que tes données sont ok avec un echo (si tu l as bien vérifié), donc tes données en base sont bonnes.
j'ai copier coller le resultat du echo dans $contenu, (en écrasant les données précedentes) et le replace marche nickel !
Donc cela veut dire que $contenu est modifié entre l'instant ou tu le cherches en base et l'instant ou tu fais le str_ireplace.
Genre htmlentities ou nl2br ou j'sais pas quoi...
Tes preg_replace, tu les fais avant ou après le str_ireplace ?
Enfin bref, c'est pas un bug de genre données en dur ou non. Tu as forcément une différences entre les deux au niveau de la chaine.
J'ai effectué le echo juste avant le replace,
dans le code les preg sont avant, mais de toute façon il ne font pas leur boulot.
Je suis sur de ne pas modifier le <#EMO_DIR#> avant d'essayer de le remplacer.
Je pense que c'est peut etre lié à SPIP car si je test mon code dans un .php normal,
ça marche...
Spip traite peut etre les données de la base, et ce traitement (quel qu'il soit) encode peut etre mal certains caractères, ou que sais-je encore...
Ou pas.
Mais si je suis bloqué c'est bien qu'il y a un problème ^^
http://damienalexandre.fr/
Bon j'ai finis par trouver,
c'est a cause du parseur de squelette de Spip qui considérer #EMO_DIR comme une variable de squelette.
J'aurais pu y penser avant...
C'est en fouillant dans le cache que j'ai découvert ça. Bref le problème est résolu merci pour votre aide.
http://damienalexandre.fr/
Ravi que tu ais fini par trouver.
Des fois on reste bloqué pendant des heures sur des choses bêtes ....
Necnom :)
Ecrire un message
Votre message vient d'être créé avec succès.
BB-Code
Pour insérer une URL clickable
Pour insérer une adresse E-mail
Pour annoter
Pour écrire du code
Pour faire un lien vers une fonction PHP
Pour écrire du texte préformaté
Pour écrire du texte en gras
Pour écrire du texte en italique
Pour écrire du texte souligné
Pour écrire du texte barré
Pour écrire un titre principal
Pour écrire un titre secondaire
Pour écrire une liste
Smiley
:bond:
:boxe:
:bsmile:
:bump:
:clap:
:coeur:
:cool:
:cry:
:eek:
:evil:
:fleur:
:fou2:
:fou:
:grin:
:grrr:
:hammer:
:hippy:
:hum:
:idee2:
:idee:
:kdo:
:king:
:ko:
:lol:
:love2:
:love:
:mad:
:maitre:
:noel:
:oops:
:raa:
:razz:
:roll:
:sad:
:skull:
:smile:
:timide:
:trink:
:vice:
:vomi:
:wink:
:zzz: