preg_match fysieke url of alternatief voor preg_match

Status
Niet open voor verdere reacties.

blackeagle67

Gebruiker
Lid geworden
13 okt 2009
Berichten
158
Hallo,

Op het moment ben ik bezig met een systeem om mensen met een bepaald abbonement de website te controleren of zij een url van onze site op de opgegeven pagina hebben staan.

Nou heb ik het meeste wel gevonden maar bij de preg_match loop ik vast.
Ik zou graag de pregmatch laten controleren of er een url op de opgegeven pagina staat. Deze verwijst dan naar onze site met bedrijf informatie.

PHP:
function webcheck ($url) {
        $ch = curl_init ($url) ;
        curl_setopt ($ch, CURLOPT_RETURNTRANSFER, 1) ;
        $res = curl_exec ($ch) ;
        curl_close ($ch) ;
        return ($res) ;
}

$erg = webcheck("www.websiteurlhier.nl/pagina.php?test=test");
$pattern = '/http://www.onzewebste.nl/index.php?page=bedrijven&id=1234&login=true/';
preg_match($pattern, $erg, $matches, PREG_OFFSET_CAPTURE);

maarja hoe zorg ik dat dat pattern als valide patroon geaccepteerd word.
Ik kan het wel handmatig toepassen op deze url maar zodra deze dan uit de database zou moeten worden gehaald gaat het wss fout.

Tips zijn welkom.
 
Laatst bewerkt:
Verdomme net als ik dit bericht heb geplaatst vind ik mn oplossing :o

PHP:
function webcheck ($url) {
        $ch = curl_init ($url) ;
        curl_setopt ($ch, CURLOPT_RETURNTRANSFER, 1) ;
        $res = curl_exec ($ch) ;
        curl_close ($ch) ;
        return ($res) ;
}

$erg = webcheck("www.websiteurlhier.nl/pagina.php?test=test");
$pattern = "http://www.onzewebste.nl/index.php?page=bedrijven&id=1234&login=true";
$pattern = str_replace('/','\/',$pattern);
$pattern = str_replace('?','\?',$pattern);
$pattern = str_replace('&','\&', $pattern);
$pattern = '/'.$pattern.'/';
print_r($pattern);
echo "<br />";
echo "<br />";
preg_match($pattern, $erg, $matches, PREG_OFFSET_CAPTURE);
print_r($matches);
echo "<br />";
echo "<br />";
echo count((array)$matches);

zeggen jullie dat dit een nette oplossing is of zouden jullie het anders doen?
 
Laatst bewerkt:
Verdomme net als ik dit bericht heb geplaatst vind ik mn oplossing :o

PHP:
function webcheck ($url) {
        $ch = curl_init ($url) ;
        curl_setopt ($ch, CURLOPT_RETURNTRANSFER, 1) ;
        $res = curl_exec ($ch) ;
        curl_close ($ch) ;
        return ($res) ;
}

$erg = webcheck("www.websiteurlhier.nl/pagina.php?test=test");
$pattern = "http://www.onzewebste.nl/index.php?page=bedrijven&id=1234&login=true";
$pattern = str_replace('/','\/',$pattern);
$pattern = str_replace('?','\?',$pattern);
$pattern = str_replace('&','\&', $pattern);
$pattern = '/'.$pattern.'/';
print_r($pattern);
echo "<br />";
echo "<br />";
preg_match($pattern, $erg, $matches, PREG_OFFSET_CAPTURE);
print_r($matches);
echo "<br />";
echo "<br />";
echo count((array)$matches);

zeggen jullie dat dit een nette oplossing is of zouden jullie het anders doen?

Waarom doe je een 3-tal keer "str_replace", terwijl je dit direct in de $pattern-variabele kunt aanpassen? Beetje onzinnig imo. Verder zie ik geen reden om het in een variabele te stoppen.
Waar je wel rekening mee moet houden is de url zelf: veranderen de parameters (of de volgorde)? Als dat gebeurd, geeft je regex dus geen resultaten.


Edit: ik zie dat je weinig met curl doet, waarom gebruik je geen file_get_contents ()?
 
Laatst bewerkt:
ik heb expres geen file_get_content() gebruikt omdat werd gezegd dat het niet altijd door elke site zou worden toegelaten. Ten tweede die test url die erin staat veranderd strx constant door de verschillende websites en pagina's die mensen hebben het geheel moet daarom een beetje dynamisch blijven.

Ehm kan ik dat doen die str_replace karakters in 1 waarde plaatsen?
dus: str_replace('/, ?, &', '\/,\?,\&', $pattern)?

De regex komt er later nog in. Op het moment is er nog niet echt een regex (jeweetwel speciale karakters etc.) aanwezig in mijn ogen is dit voornamelijk een voorwaarde. De voorwaarde is dat de url op de pagina moet staan (jaja tegenstelling regex is ook voorwaarde).
Er komt bij het plaatsen van de url in de database wel een regex die de link controleert opgegeven door het bedrijf.
 
Als je meerdere dingen hebt die je wilt vervangen door hetzelfde met str_replace kun je een array gebruiken als eerste param.

PHP:
str_replace( array( "a", "b", "c"), "d", "abcde" ); // "dddde"
 
hey bedankt Frats.

Ik heb t nu in 3 regels kunnen plaatsen.
Code:
$match = array('/','?','&');
$replace = array('\/','\?','\&');
$pattern = '/'.str_replace($match, $replace, $pattern).'/';
 
dat is een duidelijke nee?

ik vroeg het me af omdat mn collega programmeur noemde dat enkele functionaliteiten uit php 5 niet in php 6 komen. Hij noemde hier toevallig curl bij dus ik d8 ik zoek dat uit.
ik kwam het hier: http://www.corephp.co.uk/archives/19-Prepare-for-PHP-6.html ook zo niet tegen. Eventueel word ook mysql eruit gehaald? Ik heb het nergens bevestigd gezien. Wel word genoemd dat de mysqlnd (native driver) de libmysql zal vervangen nou heb ik zo nog niet gevonden wat t verschil is tussen deze 2.

Kunnen jullie mij dit uitleggen?
 
Sowieso gaan zulke veranderingen geleidelijk. De normale mysql_*-functies zullen niet snel verdwijnen, maar wellicht gaan we wel naar een algemene mysqli-implementatie toe. Wat wel verdwijnt zijn de ereg_*- en eregi_*-functies. Ik zou me gewoon houden aan de officiële mededelingen van PHP en me vooral niet teveel zorgen maken.
 
He bedankt voor de info.
Ik zal zelf php.net eens wat beter in de gaten gaan houden wat dat betreft.

Nogmaals hartelijk bedankt allemaal dit topic mag dicht :thumb:
 
Status
Niet open voor verdere reacties.
Terug
Bovenaan Onderaan