str_replace qui ne marche pas quand les données viennent de MySQL

Répondre
mobman02
le 01/08/2007 à 23:39
mobman02
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/
LA GLOBULE
le 02/08/2007 à 00:20
LA GLOBULE
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.
mobman02
le 02/08/2007 à 08:26
mobman02
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/
LA GLOBULE
le 02/08/2007 à 08:54
LA GLOBULE
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 ?
mobman02
le 02/08/2007 à 10:15
mobman02
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/
LA GLOBULE
le 02/08/2007 à 11:42
LA GLOBULE
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.
mobman02
le 02/08/2007 à 14:08
mobman02
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/
mobman02
le 03/08/2007 à 01:23
mobman02
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/
Necnom
le 03/08/2007 à 05:57
Necnom
Ravi que tu ais fini par trouver.
Des fois on reste bloqué pendant des heures sur des choses bêtes ....
Necnom :)
Répondre

Ecrire un message

Votre message vient d'être créé avec succès.
LoadingChargement en cours