Zoeken op webpagina met preg_match

Overzicht Reageren

Sponsored by: Vacatures door Monsterboard

Guido  -

Guido -

14/07/2017 14:25:48
Quote Anchor link
Goedendag,

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.

Code (php)
PHP script in nieuw venster Selecteer het PHP script
1
2
3
if (preg_match("/phphulp/", $subject)) {
  // script laden
}


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 -
 
PHP hulp

PHP hulp

30/11/2024 03:41:12
 
E vH

E vH

14/07/2017 14:31:22
Quote Anchor link
Hoe haal je de "body tags" op, op de betreffende webpagina?
 
Guido  -

Guido -

14/07/2017 14:36:04
Quote Anchor link
Hoi Elmar,

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
 
E vH

E vH

14/07/2017 14:43:38
Quote Anchor link
Geef eens relevante code...
 
Guido  -

Guido -

14/07/2017 15:03:45
Quote Anchor link
Hoe bedoel je, ik wil alleen weten hoe kan zoeken tussen de body tags van een webpagina. Dus hoe ik de $subject moet instellen.

Guido
 
E vH

E vH

14/07/2017 15:14:21
Quote Anchor link
Ik raak je kwijt...

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)
PHP script in nieuw venster Selecteer het PHP script
1
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";
}

?>
 
Guido  -

Guido -

14/07/2017 15:38:58
Quote Anchor link
Hoi Elmar,

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)
PHP script in nieuw venster Selecteer het PHP script
1
2
$content = file_get_contents('https://www.phphulp.nl/');
$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 -
 
E vH

E vH

14/07/2017 15:42:29
Quote Anchor link
Je zou wellicht ook zoiets kunnen doen:

Code (php)
PHP script in nieuw venster Selecteer het PHP script
1
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){
// ...}
}
?>


Worden het er heel veel.. wellicht een array maken / functie schrijven?
Gewijzigd op 14/07/2017 15:43:57 door E vH
 
Guido  -

Guido -

14/07/2017 17:11:54
Quote Anchor link
Dat is inderdaad netter.

Ik merk dat ik ook gewoon op ID of CSS class kan zoeken, dat is wat ik wil:
Code (php)
PHP script in nieuw venster Selecteer het PHP script
1
$phphulp= strpos($content, 'class="my-class"');


Zie jij hier problemen als ik het zo doe? Conflict met iets, laadtijd, iets anders?

Guido
 
E vH

E vH

14/07/2017 17:25:31
Quote Anchor link
Als je je "data" kent, dan zie ik geen problemen.
 
Guido  -

Guido -

14/07/2017 19:18:18
Quote Anchor link
Hoi Elmar,

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
 
Rob Doemaarwat

Rob Doemaarwat

15/07/2017 21:56:40
Quote Anchor link
Ik kan je ook nog niet helemaal volgen, maar ik zie twee varianten:

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)
PHP script in nieuw venster Selecteer het PHP script
1
2
3
4
$andere_html = file_get_contents($url_andere_pagina);
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().
 
Guido  -

Guido -

12/08/2017 11:27:15
Quote Anchor link
Hallo Rob,

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.
 
- Ariën  -
Beheerder

- Ariën -

12/08/2017 11:39:23
Quote Anchor link
Als je specifiek door de structuur van een HTML-document wilt zoeken. Dan kan je prima gebruik maken van DOMDocument().
 



Overzicht Reageren

 
 

Om de gebruiksvriendelijkheid van onze website en diensten te optimaliseren maken wij gebruik van cookies. Deze cookies gebruiken wij voor functionaliteiten, analytische gegevens en marketing doeleinden. U vindt meer informatie in onze privacy statement.