Page 1 sur 1

Extraire du code html dans une variable php

Posté : 13 juil. 2016, 11:43
par Weezy
Bonjour à tous,
Cela fait un moment que je bloque sur ce problème, je vous explique:

Je veux récupérer deux parties d'un code html, la partie entre <head></head et la partie entre <body></body>.
J'ai commencé à essayer d'extraire la partie compris entre les HEAD.
voici le code complet de la page html:
<!DOCTYPE html>
<html>

<head>
<meta http-equiv="Content-Type" content="text/html; charset=UTF-8" />
<script src="wordcloud.js/src/wordcloud.js"></script>
</head>

<body>

<style>
  canvas {
      padding-left: 100;
      margin-top: 150;
      width: 600px;
  }
</style>

<canvas id="theCanvas" width="1000" height="1000"></canvas>

<script>

///////fonction ////////
function load() {

    if (window.XMLHttpRequest) {
	     request = new XMLHttpRequest();
    }
    else if (window.ActiveXObjet) {
     request = new ActiveXObjet("Microsoft.XMLHTTP");
     }
    else {
return; 
}

request.open('GET', 'nuageMot4.txt', false); // Synchro
request.send(null);

return request.responseText;
}
////////////////////////////////////////////////////////////////////////////////

var canvas=document.getElementById('theCanvas');
var context=canvas.getContext('2d');

var text = load();

var pattern = /((^|[^a-z0-9àáâãäåçèéêëìíîïðòóôõöùúûüýÿ]))/gi;
textWithoutSpecialChars = text.replace(pattern, " " );

var patternWord=/[\wàáâãäåçèéêëìíîïðòóôõöùúûüýÿ]{2,}/gi; 
var words = textWithoutSpecialChars.match(patternWord);

var newArray= new Array();

for(i = 0; i<words.length; i++){

  var index = words[i];
    if(typeof newArray[index] != "undefined"){
      newArray[index]++;
    }
    else{
      newArray[index] = 1;
    }
}
//compare
function compare(a, b) {
    return b[1] - a[1];
}

var list =new Array();
for (var index in newArray){
     list.push(new Array(index, (newArray[index]/words.length)*100));
}
list.sort(compare); // tri 

WordCloud(canvas, { list:  list,
                    gridSize: 12,
                    weightFactor: 50,// taille de la police
                    fontFamily: "Average, Times, serif",
                    color: function() {
                        return (["#d0d0d0", "#e11", "#44f"])[Math.floor(Math.random() * 3)]
                            },
                    backgroundColor: "#333",
                    drawOutOfBound: true
                  });

</script>
</body>
</html>
voici le code qui permet d'extraire le contenue entre les head:
$adresse='http://127.0.0.1/nuageMots.html'; // lien de la page html ci-dessus
$page=file_get_contents($adresse);
preg_match_all('#<head>
           <meta http-equiv="Content-Type" content="text/html; charset=UTF-8"/>
           <script src="wordcloud2.js/src/wordcloud2.js"></script>
           </head>#i', $page, $liens);
foreach($liens[0] as $complet) {
  echo htmlspecialchars($complet).'<br />';
}
le echo devrait m'afficher : <head> <meta http-equiv="Content-Type" content="text/html; charset=UTF-8"/><script src="wordcloud2.js/src/wordcloud2.js"></script></head>
mais rien ne s'affiche .

Merci d'avance pour votre aide ;)

Re: Extraire du code html dans une variable php

Posté : 13 juil. 2016, 11:53
par Spols
pour faire ceci, j'utiliserai plutot substr et strpos

tu cherche la position de <head> et de </head> et tu prends ce qui se trouve entre les deux
$head_text = substr($text,strpos(strtolower($text),"<head>")+6,strpos(strtolower($text),"</head>"));
j'utilise strtolower pour permettre les balise head et HEAD sans distinction.
Je met le +6 pour ne pas inclure la balise head,

et de même pour body

Re: Extraire du code html dans une variable php

Posté : 13 juil. 2016, 13:11
par Weezy
Merci pour ta réponse Spols :)

Lorsque que j'exécute ceci :
$adresse='http://127.0.0.1/nuageMots.html';
$page=file_get_contents($adresse);
$head_text = substr($page,strpos(strtolower($page),"<head>")+6,
                    strpos(strtolower($page),"</head>"));
echo $head_text;
Rien ne s'affiche

Re: Extraire du code html dans une variable php

Posté : 13 juil. 2016, 13:17
par Spols
un echo de $page te donne quoi ?
as tu regarder dans le code source ? car des balise html de head ne s'afficheront pas

Re: Extraire du code html dans une variable php

Posté : 13 juil. 2016, 16:20
par moogli
juste en passant on peu éviter les strtolower avec stripos à la place de strpos ;)

et si tu as affiches que sa dans un navigateur c'est normal de rien voir => htmlspecialchars

un tite correction et tu devrais avoir ton bonheur
<?php
$page = <<<str
<head>
           <meta http-equiv="Content-Type" content="text/html; charset=UTF-8"/>
           <script src="wordcloud2.js/src/wordcloud2.js"></script>
           </head>
str;
$head_text = substr($page,stripos($page,"<head>")+6,
                    stripos($page,"</head>")-6);

echo htmlspecialchars($head_text);
affiche
<meta http-equiv="Content-Type" content="text/html; charset=UTF-8"/> <script src="wordcloud2.js/src/wordcloud2.js"></script>

@+

Re: Extraire du code html dans une variable php

Posté : 18 juil. 2016, 09:49
par Weezy
Merci pour vos réponses.

Mais comment puis-je généraliser en partant du principe que je ne sais pas à l'anvance ce que le <head> </head> contient?

Re: Extraire du code html dans une variable php

Posté : 18 juil. 2016, 10:04
par Spols
Nos réponse généralisent dèjà. La certitude, c'est que la portion commence par <head> et finit par </head> donc nous ne nous basons que sur cela.

Re: Extraire du code html dans une variable php

Posté : 18 juil. 2016, 10:10
par Weezy
Oui autant pour moi cela fonctionne dans le cas général.
Mais j'ai un petit souci, est-ce normal que :
$head_text = substr($page,stripos($page,"<head>")+6, stripos($page,"</head>")-6);
donne:
<meta http-equiv="Content-Type" content="text/html; charset=UTF-8" /> <script src="wordcloud2.js/src/wordcloud2.js"></script> </head> <body> <style

Alors que:
$head_text = substr($page,stripos($page,"<head>")+6, stripos($page,"</head>")-31);
donne:
<meta http-equiv="Content-Type" content="text/html; charset=UTF-8" /> <script src="wordcloud2.js/src/wordcloud2.js"></script>

Re: Extraire du code html dans une variable php

Posté : 18 juil. 2016, 13:16
par Spols
$head_text = substr($page,stripos($page,"<head>")+6, stripos($page,"</head>")-$page,stripos($page,"<head>")+6);
devrait mieux fonctionner, peut-être juste le 2ème +6 à adapter en + 5 ou +7.

Re: Extraire du code html dans une variable php

Posté : 18 juil. 2016, 16:36
par Weezy
ok merci pour ton aide :)