Deel van URL strippen
Ik zou graag willen weten hoe ik een deel van een url kan weghalen. Het gedeelte wat ik weg wil hebben staat altijd achter een - (koppelteken) wat voor de rest nergens in de url voor gaat komen.
Het volgende script heb ik op mijn pagina:
Code (php)
1
2
3
4
5
6
2
3
4
5
6
<?php
$thumbnail_id=get_the_post_thumbnail($post->ID);
preg_match ('/src="(.*)" class/',$thumbnail_id,$link);
<a href="echo $link[1];" rel="lightbox">the_post_thumbnail();</a>
?>
$thumbnail_id=get_the_post_thumbnail($post->ID);
preg_match ('/src="(.*)" class/',$thumbnail_id,$link);
<a href="echo $link[1];" rel="lightbox">the_post_thumbnail();</a>
?>
Wat dit doet is de thumbnail url opvragen, deze bevat standaard allerlei extra attributen zoals classes, titles, etc. Doormiddel van preg_match(..) stript hij de url tot .jpg.
Wat ik overhoudt is een volgende url:
http://www.domain.com/directory/imagenaam-e1234567890123.jpg
Dit is prima, omdat dit de kale URL is zonder extra attributen, maar het gedeelte "-e1234567890123" voor .jpg zou ik ook graag weg willen hebben, zo houdt ik namelijk de originele foto over welke ik via vervolgens via lightbox laat uitvergroten.
(de imagenaam-e123456789123.jpg is een gecropte versie van het plaatje)
Het gedeelte dat weg moet begint dus altijd met -, en vervolgens 14 letters en/of cijfers.
Ik heb al enige tijd gezocht hoe preg_match precies werkt maar ik kom er niet uit.
is er iemand die mij hiermee kan helpen?
Alvast bedankt!
Mvg,
Yordy
Gewijzigd op 08/09/2011 00:18:24 door Yordy Rathernot
Code (php)
1
2
3
4
5
6
7
8
9
2
3
4
5
6
7
8
9
<?php
$url = 'http://www.domain.com/directory/imagenaam-e1234567890123.jpg';
if(preg_match('/(\-{1}[a-z0-9]{14})\.jpg$/i', $url, $matches)) {
$url = str_replace($matches[1], '', $url);
echo $url;
}else{
echo 'geen matches';
}
?>
$url = 'http://www.domain.com/directory/imagenaam-e1234567890123.jpg';
if(preg_match('/(\-{1}[a-z0-9]{14})\.jpg$/i', $url, $matches)) {
$url = str_replace($matches[1], '', $url);
echo $url;
}else{
echo 'geen matches';
}
?>
Wanneer ik de code rechtstreeks copy (en enkel de inhoud van de url wijzig) geeft hij "geen matches"
De volgende code dus:
Code (php)
1
2
3
4
5
6
7
8
9
10
11
2
3
4
5
6
7
8
9
10
11
<?php
$url = get_the_post_thumbnail($post->ID);;
if(preg_match('/(\-{1}[a-z0-9]{14})\.jpg$/i', $url, $matches)) {
$url = str_replace($matches[1], '', $url);
echo $url;
}else{
echo 'geen matches';
}
?>
$url = get_the_post_thumbnail($post->ID);;
if(preg_match('/(\-{1}[a-z0-9]{14})\.jpg$/i', $url, $matches)) {
$url = str_replace($matches[1], '', $url);
echo $url;
}else{
echo 'geen matches';
}
?>
Enig idee nog?
Wat betekent trouwens $/i? haalt hij hiermee al het overige achter .jpg weg?
Alvast bedankt!
Verder kijkt deze alleen naar .jpg's, misschien ligt daar het probleem?
Dus in principe kijkt hij nu of je url eindigt met "-[randomcrap die uit 14 letters en cijfers bestaat ].jpg"
Gewijzigd op 08/09/2011 11:15:24 door Tim S
print $url;
Zou je dit eens kunnen doen en het resultaat hier neer zetten?
http://www.domain.nl/wp-content/uploads/voorbeeld_foto2-e1315313305763.jpg" class="attachment-post-thumbnail wp-post-image" alt="Voorbeeld Foto 2" title="Voorbeeld Foto 2"
zoals je ziet voegt hij hier nog allerlei attributen toe zoals alt, class en title.
Dit is al weggehaald met .
Nu enkel nog dus het gedeelte -e12345678900 voor de jpg zodat ik
http://www.domain.nl/wp-content/uploads/voorbeeld_foto2.jpg overhoudt.
Als ik namelijk :
Code (php)
1
2
3
4
5
6
7
8
9
10
11
2
3
4
5
6
7
8
9
10
11
<?php
$url = "http://www.domain.nl/wp-content/uploads/voorbeeld_foto2-e1315313305763.jpg" ;
if(preg_match('/(\-{1}[a-z0-9]{14})\.jpg$/i', $url, $matches)) {
$url = str_replace($matches[1], '', $url);
echo $url;
}else{
echo 'geen matches';
}
?>
$url = "http://www.domain.nl/wp-content/uploads/voorbeeld_foto2-e1315313305763.jpg" ;
if(preg_match('/(\-{1}[a-z0-9]{14})\.jpg$/i', $url, $matches)) {
$url = str_replace($matches[1], '', $url);
echo $url;
}else{
echo 'geen matches';
}
?>
Krijg ik exact de gewenste URL :), probeer bovenstaand maar eens als LOS php script te draaien dan zie je wel wat ik bedoel
Het gaat al mis in jouw eerste eigen code.
preg_match ('/src="(.*)" class/',$thumbnail_id,$link);
Ik zie nergens 'src'
Gewijzigd op 08/09/2011 11:59:21 door - SanThe -
Je code klopt inderdaad als ik hem rechtstreeks kopieer. Bedankt alvast daarvoor :)
Ik denk dat het probleem is dat ik bij $url = niet hard de image url kan zetten, deze is per post anders en moet dus dynamisch worden opgehaald. Dit gebeurt met:
Wanneer ik dus in jou stuk code
Code (php)
1
<?php $url = "http://www.domain.nl/wp-content/uploads/voorbeeld_foto2-e1315313305763.jpg" ; ?>
vervang met:
werkt het niet meer. De url die daar uitkomt is dus:
http://www.domain.nl/wp-content/uploads/voorbeeld_foto2-e1315313305763.jpg" class="attachment-post-thumbnail wp-post-image" alt="Voorbeeld Foto 2" title="Voorbeeld Foto 2"
Vervolgens laat hij daar jou gedeelte van die preg_match code op los. Maar dat is dus op een heel andere URL dan de harde URL zonder class, alt, en title..
Toevoeging op 08/09/2011 12:02:52:
Eigenlijk zou je bij jouw code in de preg_match de rest van de attributen moeten weghalen, dan klopt het.
Is dat mogelijk? dat je ook class=.., alt=.. etc. weghaalt? wat achter .jpg staat
Gewijzigd op 08/09/2011 12:05:09 door Yordy Rathernot
Dan zit het probleem zoals Santhe al zei niet in de code die we zitten te debuggen (of pogen) maar in de URL zoals jij deze aan het stukje code aanlevert :)
- SanThe - op 08/09/2011 11:57:11:
De code van Jacco is okee.
Het gaat al mis in jouw eerste eigen code.
preg_match ('/src="(.*)" class/',$thumbnail_id,$link);
Ik zie nergens 'src'
preg_match ('/src="(.*)" class/',$thumbnail_id,$link);
Ik zie nergens 'src'
Helaas, dit was niet juist.
Ik heb van jullie beiden scripts een combi gemaakt en die werkt.
Code (php)
1
2
3
4
5
6
7
2
3
4
5
6
7
<?php
$thumbnail_id=get_the_post_thumbnail($post->ID);
preg_match ('/src="(.*)" class/',$thumbnail_id,$link);
preg_match('/(\-{1}[a-z0-9]{14})\.jpg$/i', $link[1], $matches);
$url = str_replace($matches[1], '', $link[1]);
echo '<a href="' . $url . '" rel="lightbox">the_post_thumbnail()</a>';
?>
$thumbnail_id=get_the_post_thumbnail($post->ID);
preg_match ('/src="(.*)" class/',$thumbnail_id,$link);
preg_match('/(\-{1}[a-z0-9]{14})\.jpg$/i', $link[1], $matches);
$url = str_replace($matches[1], '', $link[1]);
echo '<a href="' . $url . '" rel="lightbox">the_post_thumbnail()</a>';
?>
Gewijzigd op 08/09/2011 12:08:44 door - SanThe -
Problem solved!
Heel erg bedankt Tim, SanThe en Jacco
Gewijzigd op 08/09/2011 13:05:19 door Yordy Rathernot