Zoeken op webpagina met preg_match
Ik heb een website en wil een script alleen laden als een bepaald woord (bijvoorbeeld "phphulp") voorkomt tussen de body tags op de betreffende webpagina.
Mijn vraag, hoe moet ik de $subject instellen? De $subject moet dus de body content zijn toch? Maar hoe geef ik de opdracht om tussen body tags te zoeken?
Deze pagina is overigens variabel, dus een (vaste) URL in de $subject is geen optie.
Guido
Gewijzigd op 14/07/2017 14:31:54 door Guido -
Hoe haal je de "body tags" op, op de betreffende webpagina?
Tja, ook dat weet ik niet goed..
Middels file_get_contents() schijn ik de webpagina te kunnen doorzoeken, maar pageload werd toen enorm. Dus ik deed iets niet goed ;-)
Guido
Geef eens relevante code...
Guido
Je hebt een website, met een script, die content genereert of ergens ophaalt... correct?
Vervolgens zeg je: "Middels file_get_contents() schijn ik de webpagina te kunnen doorzoeken"
Dus ... dit betreft dus de content van een "andere" website? correct?
Zodoende dat ik vroeg om jouw relevante code...
Maar goed; als je ergens zoiets gebruikt: $content = file_get_contents().
Dan zit het content gedeelte in de variabele $content...
Je zou dan zoiets kunnen doen:
Code (php)
1
2
3
4
5
6
7
8
9
10
2
3
4
5
6
7
8
9
10
<?php
// aangenomen dat dit een soort van jou functie is.
$content = file_get_contents();
//vervolgens:
$content = strpos("phphulp", $content);
if ($content !== false) {
include "script.php";
}
?>
// aangenomen dat dit een soort van jou functie is.
$content = file_get_contents();
//vervolgens:
$content = strpos("phphulp", $content);
if ($content !== false) {
include "script.php";
}
?>
Duidelijk.
Komt er eigenlijk op neer dat ik een stylesheet (css file) alleen wil laden als een formulier op de pagina staat. Anders heeft het geen zin om stylesheet te laden.
Ik dacht dit met preg_match te moeten doen. En om de vraagstelling heel eenvoudig te houden, had ik dus doorgegeven te zoeken naar een bepaald woord in mijn code (phphulp), maar eigenlijk zoek ik naar een CSS class of een form ID.
Met een kleine aanpassing schijnt het te werken:
Code (php)
1
2
2
$content = file_get_contents('https://www.phphulp.nl/');
$content = strpos($content, "phphulp");
$content = strpos($content, "phphulp");
Maar de URL is dus variabel (formulier staat niet op vaste pagina), maar ik denk dat ik daar wel uit ga komen, via $server tag.
Bedankt voor zover!
Guido
Gewijzigd op 14/07/2017 15:41:10 door Guido -
Code (php)
1
2
3
4
5
6
7
8
9
10
11
12
13
2
3
4
5
6
7
8
9
10
11
12
13
<?php
$content = file_get_contents('https://www.phphulp.nl/');
$phphulp= strpos($content, "phphulp");
$joep= strpos($content, "Joep");
if($phphulp){
//....
}
if($joep){
// ...}
}
?>
$content = file_get_contents('https://www.phphulp.nl/');
$phphulp= strpos($content, "phphulp");
$joep= strpos($content, "Joep");
if($phphulp){
//....
}
if($joep){
// ...}
}
?>
Worden het er heel veel.. wellicht een array maken / functie schrijven?
Gewijzigd op 14/07/2017 15:43:57 door E vH
Ik merk dat ik ook gewoon op ID of CSS class kan zoeken, dat is wat ik wil:
Zie jij hier problemen als ik het zo doe? Conflict met iets, laadtijd, iets anders?
Guido
Als je je "data" kent, dan zie ik geen problemen.
Nou nee, enige wat ik weet is dat mijn formulier op een pagina kan staan, en ik stylesheet alleen wil laden wanneer het ID (of CSS class) gevonden wordt op die pagina..
Wat zou eventueel een conflict kunnen veroorzaken dan?
Guido
Toevoeging op 15/07/2017 14:39:44:
Hoi Elmar,
Ik merk dat als $content dezelfde site is als waar de rest vh script staat, de pagina eindeloos blijft laden. Dus ik denk niet dat dit gaat werken.
In ieder geval bedankt voor je hulp.
Guido
1) Je laadt een andere pagina, en aan de hand daarvan moet er een script geladen/toegevoegd worden. Dit zou je op deze manier kunnen doen:
Code (php)
1
2
3
4
2
3
4
$andere_html = file_get_contents($url_andere_pagina);
if (preg_match("/<body>.*phphulp.*<\\/body>/s", $andere_html)){
//voeg script in
}
if (preg_match("/<body>.*phphulp.*<\\/body>/s", $andere_html)){
//voeg script in
}
Als je $url_andere_pagina je eigen pagina is, dan gaat dit niet werken, want dan blijft ie zichzelf aanroepen (als een hond die z'n eigen staart achterna zit).
2) Je genereert een pagina, maar wilt een script alleen laden als je bepaalde functionaliteit in de body hebt.
Ook hier kun je weer meerdere kanten op:
a) Je kunt de beslissing of je die 'bepaalde functionaliteit' nodig hebt naar voren halen, zodat je het script meteen in de <head> toe kunt voegen.
b) Je kunt bijhouden of je die 'bepaalde functionaliteit' invoegt, en het script dan net voor de </body> invoegen.
c) Je kunt via javascript (jQuery) onload controleren of je die 'bepaalde functionaliteit' ingevoegd hebt, en het betreffende script dan laden via jQuery.getScript().
Een beetje late reactie..
1) Het werkte idd niet omdat het dezelfde pagina was; hij bleef laden.
Wat ik wou was de 2e optie, maar ik had me er inmiddels bij neer gelegd dat het niet eenvoudig zou worden dit te bouwen. Ik ga me eens in jouw suggesties verdiepen.. thanks.
Guido
ps. het betreft een WordPress plugin (een contact-formulier) en het CSS stylesheet hoeft alleen geladen te worden als het contact-formulier op een pagina staat. Nu wordt hij op iedere pagina geladen.
Als je specifiek door de structuur van een HTML-document wilt zoeken. Dan kan je prima gebruik maken van DOMDocument().