PHP|Débutant :: Forums

Advertisement

Besoin d'aide ? N'hésitez pas, mais respectez les règles

Vous n'êtes pas identifié(e).

#1 13-06-2009 11:26:56

moijhd
Membre
Inscription : 13-06-2009
Messages : 167

Récupérer tous les mots affichés dans une page web

Bonjour,

je souhaite recupérer tous les mots affichés dans une page web, c'est-à-dire tous les mots, sans les balises le formatage, mais avec les accents et autres caractères spéciaux.

Je propose la fonction suivante :

function AjouterMots($filename){
  $file_tab = file($filename);
  $file_str = str_replace(array("\n", "\r", "\t", '.', ',', '!', '?'), array('', '', '', ' ', ' ', ' ', ' '), strip_tags(implode($file_tab)));;
  $file_tab = explode(' ', $file_str);
  $file = fopen('fichier.txt','a+');
  foreach($file_tab as $mot){
    fputs($file, trim($mot)."\r\n"); 
  }
  fclose($file);
}

On suppose que les pages webs sont encodées en 'dur', c'est-à-dire que le " é " afiché dans le navigateur est un " é " dans la source.
J'ai le problème suivant : les caractères spéciaux ne sont pas récupérés correctement.
Problèmes d'encodage ?

Merci

Hors ligne

#2 13-06-2009 12:11:12

mcAllan
Mowdérateur
Lieu : Châteaurenard en Provence
Inscription : 08-05-2009
Messages : 269

Re : Récupérer tous les mots affichés dans une page web

Salut,

Quand tu dis que les caractères spéciaux ne sont pas récupérés correctement, qu'as tu à la place ?
é ?


Promotion de PPOO : Programmation Propre Orientée Objet !!
Recommande AAO : Apéritif Avec Olives...
Glop, glop

Hors ligne

#3 13-06-2009 13:12:31

moijhd
Membre
Inscription : 13-06-2009
Messages : 167

Re : Récupérer tous les mots affichés dans une page web

Justement non tongue

Exemple :
" catégories " pour " catégories " (et j'ai bien vérifié que dans la source apparait " catégories ")

Hors ligne

#4 13-06-2009 13:20:51

mcAllan
Mowdérateur
Lieu : Châteaurenard en Provence
Inscription : 08-05-2009
Messages : 269

Re : Récupérer tous les mots affichés dans une page web

C'est donc bien un problème d'encodage.
Et ce n'est souvent pas simple à régler hmm
Est ce qu'un "charset" est mentionné dans la source ?
Ensuite pour convertir, tu as la fonction iconv.
Bon courage... smile


Promotion de PPOO : Programmation Propre Orientée Objet !!
Recommande AAO : Apéritif Avec Olives...
Glop, glop

Hors ligne

#5 13-06-2009 13:35:52

moijhd
Membre
Inscription : 13-06-2009
Messages : 167

Re : Récupérer tous les mots affichés dans une page web

charset=UTF-8

Quel type de convertion utliser ?

Le problème peut-il venir de l'utilisation des fonctions tels que strip_tags() ?

=> Après un nouveau test...le problème vient de la lecture de plusieurs pages...c'est-à-dire que je boucle ma fonction et c'est ce qui semble poser problème.

En effet, si je ne traite qu'une seule page, cela fonction bien.

D'autres idées ?
Je suppose que toutes les pages sont encodées de la même façon.

Dernière modification par moijhd (13-06-2009 13:43:21)

Hors ligne

#6 13-06-2009 13:50:33

mcAllan
Mowdérateur
Lieu : Châteaurenard en Provence
Inscription : 08-05-2009
Messages : 269

Re : Récupérer tous les mots affichés dans une page web

moijhd a écrit :

Le problème peut-il venir de l'utilisation des fonctions tels que strip_tags() ?

Normalement non.

moijhd a écrit :

=> Après un nouveau test...le problème vient de la lecture de plusieurs pages...c'est-à-dire que je boucle ma fonction et c'est ce qui semble poser problème.

C'est étonnant.

Tente une conversion vers iso-8859-1...

As tu essayer d'ouvrir le fichier créé avec différent éditeurs de textes ?


Promotion de PPOO : Programmation Propre Orientée Objet !!
Recommande AAO : Apéritif Avec Olives...
Glop, glop

Hors ligne

#7 13-06-2009 13:57:54

moijhd
Membre
Inscription : 13-06-2009
Messages : 167

Re : Récupérer tous les mots affichés dans une page web

Très affreux : j'ai donc deux fichiers textes fichier.txt (9MO) et fichier1.txt (9ko), quand j'ouvre les deux avec WordPad, j'obtiens la même chose (avec le " é " moche) mais quand j'ouvre avec Bloc-Note, j'obtiens fichier.txt avec le " é " moche et le fichier1.txt avec le " é " é !

Hors ligne

#8 13-06-2009 14:01:43

mcAllan
Mowdérateur
Lieu : Châteaurenard en Provence
Inscription : 08-05-2009
Messages : 269

Re : Récupérer tous les mots affichés dans une page web

Hé bé hmm
Tu peux essayer aussi de forcer l'écriture du fichier en mode binaire (bien qu'il me semble que ce soit l'option par défaut).
$file = fopen('fichier.txt','a+b');


Promotion de PPOO : Programmation Propre Orientée Objet !!
Recommande AAO : Apéritif Avec Olives...
Glop, glop

Hors ligne

#9 13-06-2009 14:06:50

moijhd
Membre
Inscription : 13-06-2009
Messages : 167

Re : Récupérer tous les mots affichés dans une page web

No changes

Hors ligne

#10 13-06-2009 14:08:58

mcAllan
Mowdérateur
Lieu : Châteaurenard en Provence
Inscription : 08-05-2009
Messages : 269

Re : Récupérer tous les mots affichés dans une page web

Tu peux aussi utiliser la fonction : utf8_decode qui te convertira directement la chaine en ISO.


Promotion de PPOO : Programmation Propre Orientée Objet !!
Recommande AAO : Apéritif Avec Olives...
Glop, glop

Hors ligne

#11 13-06-2009 14:12:19

moijhd
Membre
Inscription : 13-06-2009
Messages : 167

Re : Récupérer tous les mots affichés dans une page web

J'ai déjà utlisé cela dans tous les sens je crois tongue

Je vais re-regarder ça un peu tout seul, voir si je ne peux pas inverser des étapes, en ajouter...

Merci pour votre aide.

Hors ligne

#12 24-06-2009 20:43:28

Maskime
Membre
Lieu : Paris 15ème
Inscription : 11-05-2009
Messages : 134
Site Web

Re : Récupérer tous les mots affichés dans une page web

Ce que je pense :
L'encodage de la page web que tu récupère est en UTF-8 le système sur lequel tu exécute PHP est paramétré pour fonctionner en ISO et c'est pour ça que lorsque tu écris dans un fichier il doit le faire par défaut en ISO => é
essaye comme ça :


function AjouterMots($filename){
  $file_tab = file($filename);
  $file_str = str_replace(array("\n", "\r", "\t", '.', ',', '!', '?'), array('', '', '', ' ', ' ', ' ', ' '), strip_tags(implode($file_tab)));;
  $file_tab = explode(' ', $file_str);
  $file = fopen('fichier.txt','a+');
  foreach($file_tab as $mot){
    //Look here
    $sToPut = utf8_decode(trim($mot));
    fputs($file, $sToPut."\r\n");
  }
  fclose($file);
}
 

La programmation est composée de 80% de réflexion pour 20% de syntaxe -> réfléchissez à votre problème par étapes

Recommande l'utilisation du pattern Singleton
Si jamais je poste un morceau de code pour vous aider, prenez bien compte que je n'ai pas forcément testé le code que je poste et qu'il est possible qu'il contienne des erreurs wink

Hors ligne

Pied de page des forums