Page 1 sur 2
J'ai trop de difficultés à échapper cette chaine !
Posté : 29 mai 2007, 18:18
par Brian
Bonjour,
voici la bête :
$chaine=ereg_replace('<img border="0"', '<img class="image" alt="Voir détail de l''annonce" width="41" height="60"',$chaine);
Merci de votre aide.

Posté : 29 mai 2007, 19:13
par Cyrano
Et si tu nous disais la nature du problème ?? TU obtiens quoi ... alors que tu voudrais obtenir quoi ?
Posté : 29 mai 2007, 19:53
par Brian
Le problème vient des apostrophes et des des guillemets qui ne sont pas considérés comme faisant parti de la chaîne, mais comme des délimiteurs...
Merci pour votre aide.
Posté : 29 mai 2007, 19:55
par Cyrano
....TU obtiens quoi ... alors que tu voudrais obtenir quoi ?
Tu pourrais illustrer ton propos avec un exemple s'il te plait, ma boule de cristal est cassée

Posté : 29 mai 2007, 19:59
par Brian
Voila le code de l'erreur :
Parse error: syntax error, unexpected T_CLASS in ******************/parser.php4 on line 107
Merci à vous.
Posté : 29 mai 2007, 20:09
par Cyrano
Ha.... ça m'avance drôlement ça... j'ai beau nettoyer mes lunettes, je ne vois toujours pas les informations demandées, pour te donner une réponse appropriée, c'est particulièrement compliqué

Posté : 29 mai 2007, 20:12
par Brian
Bon, pour faire simple :
Je veux remplacer
<img border="0"
qui est dans $chaine
par
<img class="image" alt="Voir détail de l''annonce" width="41" height="60"
Je ne vois pas comment être plus clair !
Posté : 29 mai 2007, 20:23
par Cyrano
J'imagine que ton code html ne comporte aucune balise d'image incomplète comme celle que tu montres. Tu as donc besoin de modifier des balises complètes auxquelles tu veux modifier/ajouter des attributs.
D'autre part, le message d'erreur indique un numéro de ligne dans ton code : avoir cette ligne avec quelques lignes avant aiderait pas mal à la compréhension du message d'erreur.
Et si un autre attribut précède ton attribut border : ton expression ne modifiera pas cette balise... Donc, ta question est incomplète.
Parce que selon le code de départ, ça devrait fonctionner, mais si ce n'est pas le cas, il nous manque des éléments pour te répondre intelligemment. Saisis-tu mieux ?
Posté : 29 mai 2007, 21:51
par Arcanis
Je dis surement une boulette, mais l'échappement PHP ne se fait-t-il pas uniquement avec un slash (ou anti-slash, ze sais plus comment ça s'appelle, ça: \)?
Parce que tu l'a échappé avec une autre apostrophe (comme dans MySQL).
Posté : 29 mai 2007, 21:51
par Jules Petibidon
hello,
l'antislashe est ton ami...
et accessoirement, si tu sais vraiment pas de débrouiller avec, la syntaxe
heredoc te permettra de passer outre ces problemes...
enfin pour terminer, un simple str_replace au lieu du ereg_replace suffit largement.
Posté : 30 mai 2007, 00:00
par Brian
Merci beaucoup pour ces infos, j'essaye ca demain et je vous dit, car là il es un peu trop tard !
@+
Posté : 30 mai 2007, 13:30
par Brian
Donc voilà le code que j'ai uploadé :
$chaine=str_replace('<img border=\"0\"', '<img class=\"image\" alt=\"Voir détail de l\'annonce\" width=\"41\" height=\"60\"',$chaine);
Le problème, c'est que ca ne me remplace rien, rien ne se passe...
Merci.
Posté : 30 mai 2007, 13:48
par orgerix
Premièrement, tu n'as pas besoin d'échapper les guillements (") mais seulement les apostrophes.
Ensuite, regarde bien dans ton code (HTML) si tu n'as pa fais d'erreur, comme deux espace, un attrubut entre, etc...
Posté : 30 mai 2007, 13:56
par Ryle
Bon alors un rapide petit cours d'échappement :
Dans une chaine délimitée par des apostrohpes, on peut utiliser des guillemets sans avoir besoin de les échapper. De même si la chaine est délimitée par des guillemets on peut utiliser des apostrophes sans soucis.
echo '<img src="...." alt="...." />';
echo "<img src='....' alt='....' />";
Le problème apparait donc uniquement lorsque des guillemets contiennent d'autres guillemets, ou que des apostrophes encadrent d'autres apostrophes. En effet, dans ce cas, le langage va considérer que la chaine se termine à ce caractère.
Selon le langage dans lequel on travail, la façon d'échapper un caractère dans une chaine peut varier (doubler l'apostrophe en sql, passer en entités html pour du html, etc.). En PHP on échappe un caractère en le faisant précéder d'un antislash :
echo "<img src=\"....\" alt=\"....\" />";
Ainsi, tu peux virer tous les antislash inutiles de ton expression
$chaine = str_replace(
'<img border="0"',
'<img class="image" alt="Voir détail de l\'annonce" width="41" height="60"',
$chaine
);
Posté : 30 mai 2007, 18:14
par Brian
merci beaucoup pour ce rappel plus que nécessaire!
-> Sujet réglé !