xml php et espace persistant

WRInaute occasionnel
Bonjour,

Je bloc sur un truc idiot depuis 1 journée :evil:

Je réccupère des données d'un catalogue xml avec simplexml_load_file() et les mets dans un array php.

Catalogue :
Code:
<produit>
  <titre>camescope</titre>
  <prix>1 450,00</prix>
</produit>

Mon problème vient de la balise <prix> !! Je veux pouvoir trier mon catalogue en fonction du prix. Le souci vient donc de l'espace entre le "1" et le "4" que je n'arrive pas à éliminer.

j'ai tenté du str_replace(' ', '', $prix) mais rien n'y fait. Etonnament, je peux changer la "," en ".", le "4" en"8" mais l'espace ne veut rien savoir !!!!

Si je fais un settype($prix,'float'), $prix vaut "1" !!

Autre chose étonnante, strlen($prix) me renvoie "9" alors qu'il n'y a que "8" caractères tandis qu'il me renvoie bien "6" pour un balise <prix>630,00</prix> !!

Merci d'avance !!

Dop
 
WRInaute accro
dop20vt a dit:
<prix>1 450,00</prix>

Mon problème vient de la balise <prix> !! Je veux pouvoir trier mon catalogue en fonction du prix. Le souci vient donc de l'espace entre le "1" et le "4" que je n'arrive pas à éliminer.

j'ai tenté du str_replace(' ', '', $prix) mais rien n'y fait. Etonnament, je peux changer la "," en ".", le "4" en"8" mais l'espace ne veut rien savoir !!!!

Si je fais un settype($prix,'float'), $prix vaut "1" !!

Autre chose étonnante, strlen($prix) me renvoie "9" alors qu'il n'y a que "8" caractères tandis qu'il me renvoie bien "6" pour un balise <prix>630,00</prix> !!

Mon petit doigt me dit qu'il ne s'agit pas d'un espace classique (code ASCII 32), mais d'un espace insécable ou autre chose amusante Unicodesque. Imprime le dans un fichier et fais un coup de "hd" dessus, tu verras.

Et pour le virer:
- soit tu trouves son code exact (qui va probablement dépendre du fait que le décodage UTF-8 soit bien pris en compte ou pas, mais j'avoue que je ne sais pas trop comment PHP gère tout ça)
- soit tu utilises une regex et tu vires tout ce qui n'est pas un chiffre ou le séparateur décimal (, ou .). En perl ça s'écrirait s/[^0-9.,]//g, je ne sais pas comment ça s'écrit en PHP.

Jacques.
 
WRInaute passionné
J'opererais exactement comme la dit Jacques.
$prix=floatval(str_replace(',','.',ereg_replace('[^0-9,]','',$prix)));
et un utf8_decode() si c'est bien de l'utf8.
 
WRInaute occasionnel
Je suis en charset utf-8 !!

Si je fais un utf8_decode, mon espace est remplacé par un "?" .... que je n'arrive pas non plus à éliminer avec str_replace :evil:

Au fait ca consiste en quoi de faire un "hd" ?? :oops:
 
WRInaute occasionnel
Serious a dit:
J'opererais exactement comme la dit Jacques.
$prix=floatval(str_replace(',','.',ereg_replace('[^0-9,]','',$prix)));
et un utf8_decode() si c'est bien de l'utf8.

Ca marche impec :)


Merci à tous :!:
 
WRInaute occasionnel
jcaron a dit:
dop20vt a dit:
Au fait ca consiste en quoi de faire un "hd" ?? :oops:

Euh... hd nom_du_fichier (dans un shell). Ceci dit ça n'existe peut-être pas en standard sous Linux, il doit y avoir hexdump sinon.

Jacques.

Ah bah c'est de suite plus clair 8)






Nan j'déconne j'suis largué 8O ... mais bon c'est pas grave j'arrive à trier mon catalogue par prix :lol:


Merci à tous encore une fois :!:
 

➡️ Offre MyRankingMetrics ⬅️

pré-audit SEO gratuit avec RM Tech (+ avis d'expert)
coaching offert aux clients (avec Olivier Duffez ou Fabien Faceries)

Voir les détails ici

coaching SEO
Discussions similaires
Haut