I have a blog system where user inputs the image url in the post content like
hey how are you <img src="example.com/image.png">
if the user has written like this
hello how are you <img src="example.com/image.png">
Then I want to find this img
src
line and use it as featured image
here is what I have tried:
$haystack = 'how are you <img src="hey.png">';
$needle = '<img src="';
if (strpos($haystack, $needle) !== false) {
echo "$needle";
}
else { echo "no"; }
When I echo I only get:
<img src="
I want to get whole
<img src="hey.png">
from that string how can I do this.
This should work for you:
$string = 'hey how are you <img src="example.com/image.png"> test test <img src="example.com/image2.png">';
preg_match_all('/(<img .*?>)/', $string, $img_tag);
print_r($img_tag[1]);
Output:
Array
(
[0] => <img src="example.com/image.png">
[1] => <img src="example.com/image2.png">
)
You should consider using a parser for this though. They have a lot more functionality already built in than a regex, and will error cleaner.
Regex101: https://regex101.com/r/iY1wX0/1
or if you really only over want the first img
just use preg_match
.
<?php
$string = 'hey how are you <img src="example.com/image.png"> test test <img src="example.com/image2.png">';
preg_match('/(<img .*?>)/', $string, $img_tag);
echo $img_tag[1];
Output:
<img src="example.com/image.png">
strpos
returns the index of where the needle starts in the haystack. Look at combining the returned value with substr
and haystack
to get the substring you want.
As the image src is an unknown, use regex, something like this (off the top of my head, so it may be incorrect syntax):
$string = "hey how are you <img src=\"example.com/image.png\">";
$return = preg_match('/src="([^"]+)"/', '$string', $matches);
You can use regular expression to match that string. It have been a long time since I left php... So it's something like below:
<?php
$pattern = '/<img\ssrc\=".*?">/';
$haystack = 'how are you <img src="hey.png">';
preg_match($pattern, $haystack, $matches);
print_r($matches);
?>
And the result will be
Array
(
[0] => <img src="hey.png">
)
Check out preg_match() for more details.
This is most probably way easier with using a Regular Expression (RegEx).
Here is an simple example:
$string = 'hey how are you <img src="example.com/image.png"> blah blah';
preg_match('/<img src=".*">/', $string, $matches);
print_r($matches);
Which would give you an array like this:
Array
(
[0] => <img src="example.com/image.png">
)