manipulation d'une chaîne

WRInaute impliqué
Bonjour,

J'ai besoin de manipuler le contenu d'une chaine

Code:
$storeoffer->stock_description[0]->tagData

if($show_stock_message==true){echo'<td align="center" valign="middle">'.$storeoffer->stock_description[0]->tagData.'</div></td>';

'.$storeoffer->stock_description[0]->tagData.' m'affiche bien un contenu

je comptais donc mettre cette ligne dans une variable

$tagData ="$storeoffer->stock_description[0]->tagData";

pour manipuler cette chaîne:

$in = array('à', 'á', 'â', 'ô', 'è', 'é', 'ê', 'î', 'ù', 'ú','û'); 
$out = array('à ', 'á ', 'â ', 'ô ', 'è ', 'é ', 'ê ', 'î ', 'ù ', 'ú ','û '); 
$tagData = str_replace($in, $out, $tagData); 


if($show_stock_message==true){echo'<td align="center" valign="middle">&nbsp;<div class="api_store_promo">$tagData</div></td>';}
Mais au final cela m'affiche $tagData et non pas le contenu

Débutant en php

merci

ludo[/code]
 
WRInaute impliqué
Bonjour,

et si tu essayais ça :

Code:
{echo'<td align="center" valign="middle">&nbsp;<div class="api_store_promo">'.$tagData.'</div></td>';}
 
WRInaute impliqué
et si tu essayais ça :

Code:
{echo'<td align="center" valign="middle">&nbsp;<div class="api_store_promo">'.$tagData.'</div></td>';}
[/quote]


Re Bonjour,

Merci, cela fonctionne parfaitement, en revanche je ne résouds pas complètement
mon problème en effet si je traite ma chaine , je me retrouve avec des aberrations:
numérique devient numé rique évidemment !

J'utilise le code paser XML/HTML à cette adresse
*http://www.criticaldevelopment.net/xml/parser_php4.phps

Ce parser m'enlève les espaces à chaque fois qu'il rencontre une lettre accentuée et je ne comprends pas pourquoi:

Ex: l'appareil estégalementéquipéd'un bouton de type joystick

au lieu de

l'appareil est également équipé d'un bouton de type joystick

Les espaces disparaissent entre chaque mot à chaque fois
qu'il a y une lettre accentuée en début ou en fin de mot

Merci
 
WRInaute impliqué
au fait, je ne comprends pas l'utilité de ça :
Code:
$in = array('à', 'á', 'â', 'ô', 'è', 'é', 'ê', 'î', 'ù', 'ú','û');
$out = array('à ', 'á ', 'â ', 'ô ', 'è ', 'é ', 'ê ', 'î ', 'ù ', 'ú ','û ');
$tagData = str_replace($in, $out, $tagData);

Tu remplaces les lettres accentuées par des lettres accentués ? Je pense qu'il y a un copié/collé malheureux et que la correction résoudra peut être ton autre pb.
 
WRInaute accro
dudo a dit:
J'utilise le code paser XML/HTML à cette adresse
*http://www.criticaldevelopment.net/xml/parser_php4.phps
Pour pouvoir te répondre, il faudrait un peut plus de détails, notamment un exemple concret et le moment ou cette disparition est constaté.
Ajout des echo ici et là pour voir l'évolution de ta chaine et identifier l'endroit ou les espace disparaissent.
 
WRInaute accro
bgdc a dit:
au fait, je ne comprends pas l'utilité de ça :
Code:
$in = array('à', 'á', 'â', 'ô', 'è', 'é', 'ê', 'î', 'ù', 'ú','û');
$out = array('à ', 'á ', 'â ', 'ô ', 'è ', 'é ', 'ê ', 'î ', 'ù ', 'ú ','û ');
$tagData = str_replace($in, $out, $tagData);

Tu remplaces les lettres accentuées par des lettres accentués ? Je pense qu'il y a un copié/collé malheureux et que la correction résoudra peut être ton autre pb.

je me suis aussi posé la question avant de voir qu'il rajoute les espaces disparus derrière les caractères accentués.

donc traitement aval d'un bug en amont qui donne :

je me retrouve avec des aberrations: numérique devient numé rique évidemment !
 
WRInaute impliqué
bgdc a dit:
au fait, je ne comprends pas l'utilité de ça :
Code:
$in = array('à', 'á', 'â', 'ô', 'è', 'é', 'ê', 'î', 'ù', 'ú','û');
$out = array('à ', 'á ', 'â ', 'ô ', 'è ', 'é ', 'ê ', 'î ', 'ù ', 'ú ','û ');
$tagData = str_replace($in, $out, $tagData);

Tu remplaces les lettres accentuées par des lettres accentués ? Je pense qu'il y a un copié/collé malheureux et que la correction résoudra peut être ton autre pb.


Non en fait je corrige en rajoutant l'espace disparu

$in = array('à', 'â ', 'ô ', 'è ', 'é '');
$out = array('&nbsp;à&nbsp;', '', 'â&nbsp;', 'é&nbsp; ');
$tagData = str_replace($in, $out, $tagData);

En fait, il y a 2 solutions,

1/ soit je bricole le code précédent et pour résoudre le problème il me faut une fonction qui traite la variable $tagData et qui ajoute un espace
à gauche s'il s'agit d'une première lettre accentuée et/ ou à droite s'il s'agit de la dernière lettre
accentuée de chaque mot de ma chaine. Et cela dépasse mes compétences

2/ soit je trouve le bug au niveau parse xml

J'utilise le code paser XML/HTML à cette adresse
*http://www.criticaldevelopment.net/xml/parser_php4.phps

//Setup the parser object

$parser = new XMLParser($xml);

//Work the magic...
$parser->Parse();

/*echo

$tagData ="$storeoffer->stock_description[0]->tagData";

if($show_stock_message==true) {echo'<td align="center" valign="middle"><div class="api_store_promo">'.$tagData.'</div></td>';}


Dans $tagData, les espaces disparaissent à chaque fois qu'il y a une lettre accentuée dans le texte ex: si j'ai "2 à 2" i il s'affiche "2à2"
"un ensemble de fonctionsàfaire" au lieu de "un ensemble de fonctions à faire" si j'ai du texte anglais aucun espace disparait.
 
WRInaute impliqué
as tu essayer avec des caracteres sans accents ?
Si oui, as tu le meme pb ?

Tu peux aussi essayer de regarder cette ligne :

Code:
eval('$this->'.$tag.'->tagData .= trim($data);');
 
WRInaute impliqué
bgdc a dit:
as tu essayer avec des caracteres sans accents ?
Si oui, as tu le meme pb ?

Tu peux aussi essayer de regarder cette ligne :

Code:
eval('$this->'.$tag.'->tagData .= trim($data);');

Alors là chapeau !

Sans le trim tout rentre dans l'ordre

Un grand merci !
 
Discussions similaires
Haut