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 :

REGEX sur balise html: Besoin d'aide !


Sujet :

Langage PHP

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre averti
    Profil pro
    Inscrit en
    Juin 2007
    Messages
    28
    Détails du profil
    Informations personnelles :
    Localisation : Belgique

    Informations forums :
    Inscription : Juin 2007
    Messages : 28
    Par défaut REGEX sur balise html: Besoin d'aide !
    Bonjour à toutes et à tous

    voila, j'ai une fonction qui récupère le code source d'un URL.
    Il fonctionne très bien. La voici:
    Code : 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
    21
    function codeSource($adresseFunction){
     
    	if (substr($adresseFunction, 0, 7) == "http://") {
    		$ajoutProtocol = "";
    	} else {
    		$ajoutProtocol = "http://";
    	}
     
    	if ($ouverture = @fopen($ajoutProtocol.$adresseFunction, "rb")) {
    		if ($lecture = stream_get_contents($ouverture)) {
    			$lecture= htmlentities($lecture);
    			$lecture='<pre>'.$lecture.'</pre>';
    			return $lecture;
    		} else { 
    			echo 'La page '.$adresseFunction.' ne peut ?e lut!';
    		}
    	} else { 
    		echo 'Probl? d\'ouverture de la page '.$adresseFunction.'!';
    	}
    	@fclose($ouverture);
    }
    Seulement j'ai un problème de regex.
    J'aimerais pouvoir faire un REGEX avec comme paramètre, par exemple, "<title>", mais cela ne fonctionne pas. Pourtant, un ECHO d'un résultat m'affiche bien sous forme de texte le bon code source, avec les balise HTML correctement affiché.

    J'ai bien des doutes quand au codage du texte, mais je m'en sort pas trop...



    Une idée ?

    Merci d'avance

  2. #2
    Expert confirmé
    Avatar de Benjamin Delespierre
    Profil pro
    Développeur Web
    Inscrit en
    Février 2010
    Messages
    3 929
    Détails du profil
    Informations personnelles :
    Âge : 37
    Localisation : France, Alpes Maritimes (Provence Alpes Côte d'Azur)

    Informations professionnelles :
    Activité : Développeur Web
    Secteur : High Tech - Opérateur de télécommunications

    Informations forums :
    Inscription : Février 2010
    Messages : 3 929
    Par défaut
    Pour parser du HTML, utilise DOMDocument ou SimpleXML et les XPath plutôt que des regexp.

    Et ta fonction getSource peut se résumer à
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    <?php
     
    function codeSource ($url) {
        (stripos($url, 'http://') === false) && ($url = 'http://' . $url);
        $stream = file_get_contents($url);
        return $stream ? '<pre>' . htmlentities($stream) . '</pre>' : false;
    }

  3. #3
    Membre Expert
    Avatar de gene69
    Profil pro
    Inscrit en
    Janvier 2006
    Messages
    1 769
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations professionnelles :
    Secteur : High Tech - Produits et services télécom et Internet

    Informations forums :
    Inscription : Janvier 2006
    Messages : 1 769
    Par défaut
    avec un pattern du genre:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
     
    '#<title[^>]>(.*)</title>#i';

  4. #4
    Membre averti
    Profil pro
    Inscrit en
    Juin 2007
    Messages
    28
    Détails du profil
    Informations personnelles :
    Localisation : Belgique

    Informations forums :
    Inscription : Juin 2007
    Messages : 28
    Par défaut
    Citation Envoyé par gene69 Voir le message
    avec un pattern du genre:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
     
    '#<title[^>]>(.*)</title>#i';
    non malheureusement, cela ne fonctionne pas, il m'indique "0"...


    @Benjamin Delespierre
    pourrais tu, stp, me donner un exemple de requête DOMDocument et XPath pour avoir l'équivalent de
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    '#<title[^>]>(.*)</title>#i';
    stp ? merci d'avance

  5. #5
    Membre Expert
    Avatar de gene69
    Profil pro
    Inscrit en
    Janvier 2006
    Messages
    1 769
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations professionnelles :
    Secteur : High Tech - Produits et services télécom et Internet

    Informations forums :
    Inscription : Janvier 2006
    Messages : 1 769
    Par défaut
    '#<title[^>]*>(.*)</title>#i';

    j'ai du oublié une étoile...

    Code : 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
    21
    22
     
    <?php
     
    $doc = new DOMDocument;
     
    // We don't want to bother with white spaces
    $doc->preserveWhiteSpace = false;
     
    $doc->Load('book.xml');
     
    $xpath = new DOMXPath($doc);
     
    // We starts from the root element
    $query = '//book/chapter/para/informaltable/tgroup/tbody/row/entry[. = "en"]';
     
    $entries = $xpath->query($query);
     
    foreach ($entries as $entry) {
        echo "Found {$entry->previousSibling->previousSibling->nodeValue}," .
             " by {$entry->previousSibling->nodeValue}\n";
    }
    ?>
    ah non ça c'est le manuel 1 pour 1.



    Code : 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
    <?php
     
    $doc = new DOMDocument;
     
    // We don't want to bother with white spaces
    $doc->preserveWhiteSpace = false;
     
    $doc->Load('page.html');
     
    $xpath = new DOMXPath($doc);
     
    // We starts from the root element
    $query = '//html/header/title';
     
    $entries = $xpath->query($query);
     
    foreach ($entries as $entry) {
        echo "Found ",$entry /* probablement un bug conversion en chaine impossible*/," node val:",$entry->nodeValue;
    }
    ?>
    disclaimer: non testé... mais les exemples de la doc php fonctionnent généralement.

  6. #6
    Expert confirmé
    Avatar de Benjamin Delespierre
    Profil pro
    Développeur Web
    Inscrit en
    Février 2010
    Messages
    3 929
    Détails du profil
    Informations personnelles :
    Âge : 37
    Localisation : France, Alpes Maritimes (Provence Alpes Côte d'Azur)

    Informations professionnelles :
    Activité : Développeur Web
    Secteur : High Tech - Opérateur de télécommunications

    Informations forums :
    Inscription : Février 2010
    Messages : 3 929
    Par défaut
    Ouaip
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    <?php
    libxml_use_internal_errors(true);
     
    $doc = new DOMDocument;
    $doc->loadHTMLFile('http://google.fr');
     
    $title = $doc->getElementsByTagName('title')->item(0);
    echo $title->nodeValue;

  7. #7
    Membre averti
    Profil pro
    Inscrit en
    Juin 2007
    Messages
    28
    Détails du profil
    Informations personnelles :
    Localisation : Belgique

    Informations forums :
    Inscription : Juin 2007
    Messages : 28
    Par défaut
    Merci beaucoup. Je vais tenter de faire mon bonheur avec tout ca. Je reviens vers vous au cas ou je cale sur la durée...

  8. #8
    Membre averti
    Profil pro
    Inscrit en
    Juin 2007
    Messages
    28
    Détails du profil
    Informations personnelles :
    Localisation : Belgique

    Informations forums :
    Inscription : Juin 2007
    Messages : 28
    Par défaut
    arf non j'y arrive pas. ^^

    je vais exposer plus explicitement mon soucis.

    je voudrais récupérer toute les villes contenu sur cette pages:
    http://www.pagesdor.be/q/business/static/gov.html

    (les villes apparaissent à partir du titre "A l'échelon communal")

    franchement, la je cale méchament...

Discussions similaires

  1. [HTML] Besoin d'aide HTML pour faire suivre une requête
    Par desolation dans le forum Balisage (X)HTML et validation W3C
    Réponses: 6
    Dernier message: 19/07/2007, 10h26
  2. Réponses: 3
    Dernier message: 19/04/2007, 07h50
  3. News sur mon site besoin d'aide !
    Par MMO95 dans le forum Langage
    Réponses: 2
    Dernier message: 25/02/2007, 22h05
  4. [HTML] Besoin d'aide en HTML
    Par fabris dans le forum Balisage (X)HTML et validation W3C
    Réponses: 17
    Dernier message: 08/08/2006, 16h34
  5. [CSS][HTML]Besoin d'aide
    Par Brian dans le forum Mise en page CSS
    Réponses: 14
    Dernier message: 03/09/2005, 23h22

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