Problème pour parser une page web au niveau de fgets(). - PHP - Programmation
Marsh Posté le 10-08-2005 à 09:11:10
Mais on peut écrire ça ?
$tmp = fgetc( $fp );
if( $tmp == '\c' )
Marsh Posté le 10-08-2005 à 09:28:43
bah oui
mais après une petite verif, \c doit pas existe
Code :
|
Marsh Posté le 11-08-2005 à 00:14:51
J'ai essayé, ça ne change rien en rt ou rb, même résultat : ça coupe à la taille du buffer, pas en fin de ligne, sur le caractères '^M'.
Marsh Posté le 11-08-2005 à 20:51:41
Marsh Posté le 11-08-2005 à 21:17:55
et \r\n ou \n\r ou je sais pas quoi
sinon affiche le codage des caractères pour savoir ce que c'est exactement, t'auras le code ASCII
Marsh Posté le 11-08-2005 à 22:12:15
Vraiment bizarre ce code ^M.
J'ai essayé de magouiller à coups de ord() chr() et printf("%c",$string) mais rien n'y fait. Tout simplement parce que mon fgets() ne voit déjà rien. Le texte est collé pour chaque "nouvelle ligne", il ne voit pas de caractère fantôme apparemment.
Help
Marsh Posté le 12-08-2005 à 00:43:07
bon ton truc m'intrigait un peu alors jme suis mis à chercher et finalement.. comme délimitateur dans ta fonction getline utilise "\n" (double quote..)
Marsh Posté le 12-08-2005 à 01:04:45
http://bugs.php.net/bug.php?id=16708
Apparement ça été corrigé, moi je testais sur une 4.1.2-7.0.1 et c'était foireux aussi.
Marsh Posté le 12-08-2005 à 01:14:54
Ça m'apprendra à pas encore être passé en Sarge
Enfin aux moins on sait pq comme ça.
Marsh Posté le 12-08-2005 à 07:01:14
joce a écrit : question bête : pourquoi t'utilises pas file() ? |
Je viens d'essayer, le résultat est un peu plus pratique dans la mesure où il n'y a pas de taille de buffer à indiquer et par conséquent, le texte du topic tient... sur une seule ligne. Donc ça ne change rien au problème.
push a écrit : http://bugs.php.net/bug.php?id=16708 |
J'ai une 4.3.10 (Windows), ça m'étonnerait que la CVS de septembre 2002 soit plus récente. Si ?
Marsh Posté le 12-08-2005 à 07:11:49
Après upload des fichiers sur une Fedora, elle aussi en 4.3.10, ça marche correctement avec fopen()/fgets() et file().
Je crois que la conclusion est claire.
Merci pour votre aide et vos recherches.
Marsh Posté le 28-08-2005 à 15:30:09
Bon, en fait ça ne marche pas mieux.
Je n'avais pas refait de tests depuis.
Avec file(), tout le texte du topic est contenu dans une ligne.
Avec ce code :
Code :
|
-> <a href="/profilebdd.php?id=469&cat=13&config=hardwarefr.inc" target="_blank"><img src="http://forum-images.hardware.fr/themes_static/images_forum/1/profile.gif" title="Voir son profil" alt="profil" /></a><a href="/hardwarefr/Discussions/citer-33827-3647455-1-1.htm#formulaire"><img src="http://forum-images.hardware.fr/themes_static/images_forum/1/quote.gif" title="Répondre à ce message" alt="answer" /></a></div> |
Mais comment faire pour récupérer ces fichues lignes ?
Marsh Posté le 28-08-2005 à 16:45:08
Perso avec file() j'ai une ligne par message (ce qui me paraît assez logique, un message contient des <br /> mais pas véritablement de retours chariot) et une ligne pour tout le reste du html.
Marsh Posté le 28-08-2005 à 16:48:06
Quoiqu'en ouvrant la source avec un éditeur de texte y'a l'air d'avoir des retours en effet.
Marsh Posté le 28-08-2005 à 16:54:56
Essaie avec ça :
Code :
|
(modifié par rapport au truc que t'as mis dans ton post de base)
Marsh Posté le 28-08-2005 à 19:51:51
Ca marche parfaitement avec ta solution sielfried !
Merci beaucoup ! Bonne soirée.
Marsh Posté le 09-08-2005 à 21:29:49
Hello,
J'essaie de parser le topic trombinoscope sur Discussions :
http://forum.hardware.fr/forum2.ph [...] 827&cat=13
Quand je visualise la source sous Firefox, pas de problème, toutes les lignes sont séparées.
Le problème est que mon fgets() ne voit qu'une seule ligne au niveau du texte du topic.
Code, tout ce qu'il y a de plus banal :
Donc au niveau du texte du topic, je me retrouve avec des bouts de la taille du buffer, il ne voit pas les caractères de fin de chaîne. J'ai enregistré la page et je l'ai ouverte avec VI. On voit alors des caractères ^M à la fin de certaines lignes.
Ces caractères sont bien à la fin de chaque ligne du texte du topic. VI interprète également ce bloc de texte comme n'étant qu'une ligne.
D'après mes recherches, ce caractère serait le carriage return.
http://www.computing.net/unix/wwwboard/forum/2451.html
Je ne sais pas comment spécifier à fgets() que c'est le caractère de fin de ligne. J'ai trouvé ce code, qui, je pense, pourrait m'aider :
Sometimes the strings you want to read from a file are not separated by an end of line character. the C style getline() function solves this. Here is my version:
Mais que spécifier comme caractère ? \n \r ne vont pas.
Merci pour votre aide.
Message édité par Master_Jul le 09-08-2005 à 21:31:31
---------------
En français, on écrit "connexion", pas "connection".