IdentifiantMot de passe
Loading...
Mot de passe oublié ?Je m'inscris ! (gratuit)
Navigation

Inscrivez-vous gratuitement
pour pouvoir participer, suivre les réponses en temps réel, voter pour les messages, poser vos propres questions et recevoir la newsletter

Langage PHP Discussion :

Parser du HTML en PHP


Sujet :

Langage PHP

  1. #1
    Membre du Club
    Profil pro
    Inscrit en
    Novembre 2005
    Messages
    78
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Novembre 2005
    Messages : 78
    Points : 48
    Points
    48
    Par défaut Parser du HTML en PHP
    Bonjour,

    J'imagine qu'il existe une méthode toute faite en php pour faire ça mais je ne la connais pas hélas.

    Voici ma problématique :
    J'ai du code html stocker en base de données. Le texte dans ce code est en français.
    Je voudrais traduire cette page en anglais. Pour cela je me suis interfacé avec une API mais comment fournir à cette API seulement le texte et pas les balises ? Et ensuite comment remplaçé le texte français par le texte Anglais ?

    Par exemple je voudrait qu'à partir de ça (exemple très simpliste ):
    Code html : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    <h1>Titre</h1>
    <p class="tete">J'ai fait un tableau !! </p>
    <table class="tableau chapeau">
       <tr>
          <td>
             <p "texte gras"> Bonjour <b>Les <i>Amis</i></b> de tous Pays</p>
           </td>
        </tr>
    </table>

    J'obtienne la traduction correct mais sans modifier les balises ni leurs attribut.

    J'ai jeter un oeil a DOMDocument mais je n'arrive pas à faire ce que je veux faire avec.

  2. #2
    Membre expérimenté
    Avatar de ryan
    Homme Profil pro
    Développeur Web
    Inscrit en
    Juin 2003
    Messages
    956
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Belgique

    Informations professionnelles :
    Activité : Développeur Web
    Secteur : High Tech - Multimédia et Internet

    Informations forums :
    Inscription : Juin 2003
    Messages : 956
    Points : 1 316
    Points
    1 316
    Billets dans le blog
    1
    Par défaut
    Hola!

    strip_tags?

  3. #3
    Membre du Club
    Profil pro
    Inscrit en
    Novembre 2005
    Messages
    78
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Novembre 2005
    Messages : 78
    Points : 48
    Points
    48
    Par défaut
    Bha strip_tags va permettre de supprimer toutes les balise de mon HTML mais mon but n'est pas la... Je voudrais remplacer le texte entre les balises mais ne pas supprimer les balises.

  4. #4
    Membre expert
    Avatar de Spartacusply
    Homme Profil pro
    Développeur Web
    Inscrit en
    Mai 2011
    Messages
    1 723
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Loire Atlantique (Pays de la Loire)

    Informations professionnelles :
    Activité : Développeur Web
    Secteur : High Tech - Multimédia et Internet

    Informations forums :
    Inscription : Mai 2011
    Messages : 1 723
    Points : 3 275
    Points
    3 275
    Par défaut
    Hello !

    L'idée d'utiliser DomDocument est une bonne idée, un fichier Html étant avant tout un fichier DOM.

    Que n'arrive tu pas à faire exactement ? Montre nous un bout de code pour voir là où tu bloques.

  5. #5
    Membre du Club
    Profil pro
    Inscrit en
    Novembre 2005
    Messages
    78
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Novembre 2005
    Messages : 78
    Points : 48
    Points
    48
    Par défaut
    Bha le problème que j'ai rencontré avec DOMDcument venait des lignes du genre :
    Code html : Sélectionner tout - Visualiser dans une fenêtre à part
    <p>bonjour <b>les</b> <i>amis</i> de tous pays</p>

    pour la traduction il aurai fallu que je récupère "bonjour ", "les", " amis", "de tous pays" mais avec DOMDocument je n'ai pas réussi puisque le noeud "<p>" contient le texte complet non découpé.

    Du coup j'ai changé mon fusil d'épaule... C'est beaucoup plus crade mais ça fait à peut près le boulot :


    Code php : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
     
    $pattern = "/\>[[:alnum:]' '\[\]\*\=\+\%\"\'\(\)|{\}\.\,\:\!].+?\</";
    preg_match_all($pattern, $stringHtml, $matches);
     
    $matches = $matches[0];
     
    //On supprime les < et >
    for($i =0; $i<count($matches); $i++){
    	if(is_empty(trim(str_replace('&nbsp;', '', $matches[$i])))){
    		unset($matches[$i]);
    	}else{
    		$matches[$i] = substr($matches[$i], 1, -1);
    	}
    }
     
    $matches = array_values($matches);
    $trad = new BingTraduction();
    foreach($matches as $key => $tag) {
    	$stringHtml = str_replace($tag, $trad->translate($tag, 'en', 'fr'), $stringHtml );
    }

    Je me rend bien compte que la traduction sera loin d'être parfaite mais ça me donnera une base sur laquelle repasser.

  6. #6
    Membre expérimenté
    Avatar de ryan
    Homme Profil pro
    Développeur Web
    Inscrit en
    Juin 2003
    Messages
    956
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Belgique

    Informations professionnelles :
    Activité : Développeur Web
    Secteur : High Tech - Multimédia et Internet

    Informations forums :
    Inscription : Juin 2003
    Messages : 956
    Points : 1 316
    Points
    1 316
    Billets dans le blog
    1
    Par défaut
    Hola,

    Disons que tu charges ton fichier HTML comme ceci:

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    $file = "test.html";
    $doc = new DOMDocument();
    $doc->loadHTMLFile($file);
    Ensuite, tu vas récupérer son contenu, parcourir l'arbre et repérer les noeuds dont le nom est "#text"

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    $elements = $doc->getElementsByTagName('*');
    foreach ($elements as $element) {
    	$noeuds = $element->childNodes;
    	foreach ($noeuds as $noeud) {
    		if(  $noeud->nodeName == "#text") {
    			echo "<br/>" . $noeud->nodeValue;
    		}
    	}
    }
    Ceci devrait t'afficher le contenu textuel des balises, mais pas nécessairement dans l'ordre exact.

Discussions similaires

  1. parser du HTML en php
    Par sampla dans le forum Langage
    Réponses: 5
    Dernier message: 23/01/2013, 11h24
  2. [DOM] Utilisation du DOM pour parser une page HTML en php
    Par chabliya dans le forum Bibliothèques et frameworks
    Réponses: 2
    Dernier message: 01/05/2012, 21h13
  3. [PHP-JS] Parser le HTML avant son envoi
    Par oamram dans le forum Langage
    Réponses: 3
    Dernier message: 21/11/2006, 11h22
  4. [Système] Existe-t-il un bon parser HTML pour PHP ?
    Par MiJack dans le forum Langage
    Réponses: 8
    Dernier message: 25/10/2005, 11h18
  5. Transformation xml + xsl -> HTML via PHP
    Par petit-ourson dans le forum XSL/XSLT/XPATH
    Réponses: 2
    Dernier message: 19/10/2003, 22h42

Partager

Partager
  • Envoyer la discussion sur Viadeo
  • Envoyer la discussion sur Twitter
  • Envoyer la discussion sur Google
  • Envoyer la discussion sur Facebook
  • Envoyer la discussion sur Digg
  • Envoyer la discussion sur Delicious
  • Envoyer la discussion sur MySpace
  • Envoyer la discussion sur Yahoo