Forum |  HardWare.fr | News | Articles | PC | S'identifier | S'inscrire | Shop Recherche
1268 connectés 

  FORUM HardWare.fr
  Programmation
  PHP

  [PHP] Fonction explode... à deux reprises

 


 Mot :   Pseudo :  
 
Bas de page
Auteur Sujet :

[PHP] Fonction explode... à deux reprises

n°1389191
clemdups
Posté le 16-06-2006 à 16:06:53  profilanswer
 

Bonjour,
 
Voilà, j'ai besoin de parser deux fois une chaîne de caractères, qui est du type :
 
Lien1|Titre1*Lien2|Titre2*Lien3|Titre3 ... etc.
 
Le but étant au final d'avoir quelque chose du style :
<a href='Lien1'>Titre1</a>
<a href='Lien2'>Titre2</a>
<a href='Lien3'>Titre3</a>
etc...
 
Quelque chose du style ne fonctionne pas :  

Code :
  1. $liens=explode("*",$fliens);
  2.  $i=0;
  3.  while (isset($liens[$i])) {
  4.   $titre=explode("|",$liens[$i]);
  5.   echo $titre[$i]."<br>";
  6.  $i++;
  7.  }


 
Mais je ne comprends pas pourquoi pas... Là ça me renvoie : lien1 Titre2 :( .
Merci d'avance à l'éventuelle âme charitable qui saura m'aider ;)

mood
Publicité
Posté le 16-06-2006 à 16:06:53  profilanswer
 

n°1389195
nargy
Posté le 16-06-2006 à 16:10:30  profilanswer
 

Code :
  1. $liens=explode("*",$fliens); // exploser aux caractères '*'
  2. foreach($liens as $l) // parcourrir la liste en mettant l'élément courant dans <<$l>>
  3. {
  4.   // exploser au caractère '|', ranger les deux premiers éléments
  5.   // dans $lien et $titre
  6.   list($lien,$titre)=explode("|",$l);
  7.   // afficher, sans oublier htmlentities() au cas où les titres ou les liens
  8.   // contiendraient des accents
  9.   echo "<a href=\"".htmlentities($lien)."\">".htmlentities($titre))."</a><br>";
  10. }

Message cité 2 fois
Message édité par nargy le 16-06-2006 à 16:21:16
n°1389201
clemdups
Posté le 16-06-2006 à 16:16:51  profilanswer
 

nargy a écrit :

Code :
  1. $liens=explode("*",$fliens);
  2. foreach($liens as $l)
  3. {
  4.   list($lien,$titre)=explode("|",$l);
  5.   echo "<a href=\"".htmlentities($lien)."\">".htmlentities($titre))."</a><br>";
  6. }



Merci bien, ça fonctionne :)
Je n'aurais pas été contre une petite explication avec, mais je vais pas charrier, je m'en vais feuilleter le manuel PHP ... :D

n°1389209
nargy
Posté le 16-06-2006 à 16:21:31  profilanswer
 

J'ai ajouté un commentaire, ci dessus.

n°1389215
FlorentG
Unité de Masse
Posté le 16-06-2006 à 16:25:14  profilanswer
 

nargy a écrit :

sans oublier htmlentities() au cas où les titres ou les liens contiendraient des accents


Perdu !
 
htmlentities sert surtout à escaper les caractères genre <, >, & et " pour ne pas tout faire foirer. Après y'a les entités latin1, mais on s'en fout si on maîtrise l'encoding de la page. Dans ce cas, htmlspecialchars suffirait...


Message édité par FlorentG le 16-06-2006 à 16:25:23
n°1389229
nargy
Posté le 16-06-2006 à 16:31:47  profilanswer
 

FlorentG> merci des précisions, je sais encore utiliser htmlentities(). Pour info, n'utilise jamais htmlspecialchars() si tu veux pas te retrouver avec un bug qui viendrait d'on se sait pas où un jour ou tu change la config de ton serveur.

n°1389235
anordem
Posté le 16-06-2006 à 16:34:23  profilanswer
 

Pour en revenir à ton code, le problème vient de cette ligne:

Code :
  1. echo $titre[$i]."<br>";


 
Car la variable $i est incrémentée à chaque itération :

Code :
  1. $i = 0
  2. $titre[0] = Lien1  // {Lien1,Titre1}
  3. $i = 1
  4. $titre[1] = Titre2  // {Lien2, Titre2}
  5. $i = 2
  6. $titre[2] = ??  // {Lien3, Titre3}


 
Donc, faire attention quand on utilise la même variable pour plusieurs choses. :)

n°1389240
FlorentG
Unité de Masse
Posté le 16-06-2006 à 16:37:24  profilanswer
 

nargy a écrit :

FlorentG> merci des précisions, je sais encore utiliser htmlentities(). Pour info, n'utilise jamais htmlspecialchars() si tu veux pas te retrouver avec un bug qui viendrait d'on se sait pas où un jour ou tu change la config de ton serveur.


HEINNNNNNNNNNNNNNNNNNNN ????
 
htmlentities réalise EXACTEMENT la même chose que htmlspecialchars, il encode juste en plus les entités latin1 (définies par la spec html4.01). Comme dit, si tu maîtrise ton encoding, pas besoin d'entités pour les caractères accentués. Et tout ça n'a rien à voir avec la config du serveur :(

n°1389251
nargy
Posté le 16-06-2006 à 16:40:46  profilanswer
 

Bon, c'est fini là???? oui, le serveur utilise un encoding par défaut, oui, tu utilise un include() avec la définition de ton charset, et que si tu change pour avoir un site multilingue.......

n°1389254
FlorentG
Unité de Masse
Posté le 16-06-2006 à 16:42:16  profilanswer
 

C'est pour ça que je fait tout en UTF-8 [:dawa] Et si jamais une page incluse est dans un autre charset, elle est converti à la volée en utf-8 ;)
 
Pour l'encoding par défaut, j'envoi aussi mes propres headers HTTP, donc plus de problème [:dawa]

mood
Publicité
Posté le 16-06-2006 à 16:42:16  profilanswer
 

n°1389268
j_lecruel
☀ ☁ ☂
Posté le 16-06-2006 à 16:52:47  profilanswer
 

Juste manière de faire l'enc*** de mouches...
 

Code :
  1. $liens = explode('*', $liens);
  2. for($i=0, $n=sizeof($liens); $i<$n; $i++) {
  3.    list($lien, $titre) = explode('|', $liens[$i]);
  4. }


 
Le for() est plus rapide et moins consommmateur de mémoire que le foreach...


---------------
♈ ♋ ♌ ♍ ♎ ♏ - Agora Fidelio | Galerie d'art Toulousaine
n°1389274
FlorentG
Unité de Masse
Posté le 16-06-2006 à 17:01:26  profilanswer
 

On pourrait aussi utiliser une regexp [:dawa] Ca tient en une ligne

<?php
 
$str = 'Titre1*Lien1|Titre1*Lien2|Titre2*Lien3|';
 
echo preg_replace('/(.*)\*(.*)\|/eU', "'<a href=\"' . htmlspecialchars('\\2') . '\">' . htmlspecialchars('\\1') . '</a>' .\"\n\"", $str);


n°1389283
clemdups
Posté le 16-06-2006 à 17:08:02  profilanswer
 

Merci à tous pour vos précisions :)
 

Code :
  1. Le for() est plus rapide et moins consommmateur de mémoire que le foreach...


 
Je ne sais pas trop quoi penser en lisant ça. Ce n'est certes pas faux (enfin j'te fais confiance :D ), mais n'est-ce pas négligeable avec nos machines/serveurs actuel(le)s ?

n°1389305
j_lecruel
☀ ☁ ☂
Posté le 16-06-2006 à 17:34:33  profilanswer
 

Ben tout dépend, c'est sur que sur un petit tableau le gain n'est pas vital ; c'est juste manière d'optimiser ce qui peut l'être facilement.


Message édité par j_lecruel le 16-06-2006 à 17:34:41

---------------
♈ ♋ ♌ ♍ ♎ ♏ - Agora Fidelio | Galerie d'art Toulousaine
n°1389548
FlorentG
Unité de Masse
Posté le 17-06-2006 à 09:29:31  profilanswer
 

Et d'enculer les mouches :D


Aller à :
Ajouter une réponse
  FORUM HardWare.fr
  Programmation
  PHP

  [PHP] Fonction explode... à deux reprises

 

Sujets relatifs
[CREATION] Base de données en PHP sans MySQL (PHP4 - test en cours)[Php] Miniatures d'images (à la imageshack)
[HELP] Existe-il une limite de nombre de sessions PHP ?Création de wiki ... Quelques questions.[Array Filter PHP]
Probleme avec la fonction GETFonction "Recherche" dans un site
Php débutant (vraiment)[RESOLU] liaison javascript / PHP
phpATM - PHP Transfer Manager[PHP] pourquoi ma page généré est tout blanche sans erreur ?
Plus de sujets relatifs à : [PHP] Fonction explode... à deux reprises


Copyright © 1997-2022 Hardware.fr SARL (Signaler un contenu illicite / Données personnelles) / Groupe LDLC / Shop HFR