Link verwijderen uit stuk tekst
Ik heb een stukje code:
Quote:
Code (php)
1
2
3
4
5
6
7
8
2
3
4
5
6
7
8
<?php
$bron = file_get_contents('http://www.internet.nl/bestand.html');
// Remove link
$pattern = array("/(.*<a .*>).*(<\/a>.*)/';
$replacement = array("$1$2");
$removelink = preg_replace($pattern, $replacement, $bron);
?>
$bron = file_get_contents('http://www.internet.nl/bestand.html');
// Remove link
$pattern = array("/(.*<a .*>).*(<\/a>.*)/';
$replacement = array("$1$2");
$removelink = preg_replace($pattern, $replacement, $bron);
?>
De bedoeling is om 'de link' uit het volgende bestand (bestand.html) te halen
Quote:
Dit is <a target="_blank" href="https://www.google.com/search?q=test">EEN LINK</a> naar een website.
Met de code zoals bovenstaand lijkt het te werken, echter verdwijnt ook de tekst 'EEN LINK', en dat moet er nou juist net wel blijven staan.
Het gaat dus puur om het deel '<a target="_blank" href="https://www.google.com/search?q=test">' dat weg moet, en de </a>.
De link is overigens ook elke keer anders, ik heb in dit geval 'test' als zoekterm bij Google gebruikt maar hier moet elk willekeurig zoekterm/link kunnen staan.
Wie o wie kan mij verder helpen? :)
Gewijzigd op 28/11/2012 19:55:13 door Peter Kookstijn
Je moet het gedeelte '<a ' opzoeken, position ervan in een string zetten. Dan vanaf die position op zoek gaan naar de eerst volgende '>'. Die positions gebruik je om de substring in een variabele te zetten. Dan moet je nog het gedeelte '</a>' weghalen en dat is gewoon simpelweg str_ireplace('</a>','',$haystack)
Toevoeging op 28/11/2012 20:05:58:
Code (php)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
<?php
$begintag = array();
$begintag['start'] = strpos($bron,'<a ');
$begintag['stop'] = strpos($bron,'>',$begintag[0]);
$begintag['lengte'] = $begintag['stop']-$begintag['start'];
$bron = str_ireplace('</a>','',$bron);
$begintag['totaal'] = substr($bron,$begintag['start'],$begintag['lengte'])
$bron = str_ireplace($begintag['totaal'],'',$bron);
?>
$begintag = array();
$begintag['start'] = strpos($bron,'<a ');
$begintag['stop'] = strpos($bron,'>',$begintag[0]);
$begintag['lengte'] = $begintag['stop']-$begintag['start'];
$bron = str_ireplace('</a>','',$bron);
$begintag['totaal'] = substr($bron,$begintag['start'],$begintag['lengte'])
$bron = str_ireplace($begintag['totaal'],'',$bron);
?>
Ik ga hier denk ik heel wat kritiek op krijgen maar dit is voor mij de makkelijkste manier om het je snel even uit te leggen.
Gewijzigd op 28/11/2012 20:06:42 door Albert de Wit
Maar is dit niet makkelijker:
Code (php)
1
2
3
4
2
3
4
<?php
$str = '<a href="iets.php" target="blank">resultaat</a>';
echo strip_tags($str);
?>
$str = '<a href="iets.php" target="blank">resultaat</a>';
echo strip_tags($str);
?>
Hoe je $str dan vult maakt niet uit.
Ja maar dat is alle tags. Dus als je ergens een <img> hebt dan word die ook verwijderd.
Het blijkt echter nu dat ik niet geheel volledig ben geweest aangezien het bestand(.html) nog iets uitgebreider in elkaar zit en er meerdere links/tags inzitten.
Het bestand is alsvolgt:
Quote:
<html>
<p>Dit is <a target="_blank" href="https://www.google.com/search?q=ditiswisseltABC&ditisvast">een 123 link</a> en kun je op klikken</p>
<p>Dit is <a target="_blank" href="https://www.google.com/search?q=ditiswisseltDEF&ditisvast">een 456 link</a> maar kun je ook op klikken</p>
</html>
<p>Dit is <a target="_blank" href="https://www.google.com/search?q=ditiswisseltABC&ditisvast">een 123 link</a> en kun je op klikken</p>
<p>Dit is <a target="_blank" href="https://www.google.com/search?q=ditiswisseltDEF&ditisvast">een 456 link</a> maar kun je ook op klikken</p>
</html>
Zoals je ziet het eerste deel van de link
Quote:
<a target="_blank" href="https://www.google.com/search?q=)
staat vast. Dan komt er een variable, en de link eindigt met een vaste waarde.
In de tekst tussen de tags staat ook iets wat continu anders is, en ook na de </a> tag staat weer wisselende tekst.
Elders op de pagina kan nog zo'n link staan, en daar moet precies hetzelfde mee gebeuren.
Ondanks dat ik met bovenstaande code nu een paar uur gepuzzeld heb, is het mij nog niet gelukt om het zo te krijgen. (Al leek dat simpel door de strpos aan te passen)
Wat er met bovenstaande code overigens ook gebeurd, is dat $begintag['stop'] wordt weergeven waar $begintag['start'] zich bevindt.
Ik hoop dat jullie het nog snappen, alvast dank voor jullie hulp Albert en Eddy!
Toevoeging op 29/11/2012 03:06:19:
Goedemorgen
Na nog even gepuzzeld te hebben, is het allemaal gelukt met deze ene regel:
$str = preg_replace('#(<a.*?>).*?(</a>)#', '$1$2', $str)
Nogmaals bedankt voor de hulp
Gewijzigd op 29/11/2012 00:19:11 door Peter Kookstijn