I'm trying to check if a string starts with http
. How can I do this check?
$string1 = 'google.com';
$string2 = '//www.google.com';
asked May 7, 2010 at 18:43
4
PHP 8 or newer:
Use the str_starts_with function:
str_starts_with['//www.google.com', 'http']
PHP 7 or older:
Use the substr function to return a part of a string.
substr[ $string_n, 0, 4 ] === "http"
If you're trying to make sure it's not another protocol. I'd use //
instead, since https would also match, and other things such as http-protocol.com.
substr[ $string_n, 0, 7 ] === "//"
And in general:
substr[$string, 0, strlen[$query]] === $query
Pikamander2
6,3833 gold badges42 silver badges63 bronze badges
answered May 7, 2010 at 18:46
Kendall HopkinsKendall Hopkins
41.9k17 gold badges65 silver badges87 bronze badges
10
Use strpos[]
:
if [strpos[$string2, 'http'] === 0] {
// It starts with 'http'
}
Remember the three equals signs [===
]. It will not work properly if you only use two. This is because strpos[]
will return false
if the needle cannot be found in the haystack.
CodeZombie
5,2673 gold badges28 silver badges37 bronze badges
answered May 7, 2010 at 18:45
awgyawgy
16.2k4 gold badges24 silver badges18 bronze badges
14
There is also the
strncmp[]
function and strncasecmp[]
function which is perfect for this situation:
if [strncmp[$string_n, "http", 4] === 0]
In general:
if [strncmp[$string_n, $prefix, strlen[$prefix]] === 0]
The advantage over the substr[]
approach is that strncmp[]
just does what needs to be done, without creating a temporary string.
dave
2,6461 gold badge14 silver badges32 bronze badges
answered May 7, 2010 at 23:26
SidSid
2,0961 gold badge11 silver badges10 bronze badges
4
You
can use a simple regex [updated version from user viriathus as eregi
is deprecated]
if [preg_match['#^http#', $url] === 1] {
// Starts with http [case sensitive].
}
or if you want a case insensitive search
if [preg_match['#^http#i', $url] === 1] {
// Starts with http [case insensitive].
}
Regexes allow to perform more complex tasks
if [preg_match['#^https?://#i', $url] === 1] {
// Starts with // or // [case insensitive].
}
Performance wise, you don't need to create a new string [unlike with substr] nor parse the whole string if it doesn't start with what you want. You will have a performance penalty though the 1st time you use the regex [you need to create/compile it].
This extension maintains a global per-thread cache of compiled regular expressions [up to 4096]. //www.php.net/manual/en/intro.pcre.php
answered Dec 6, 2013 at 8:25
user276648user276648
5,7796 gold badges59 silver badges83 bronze badges
8
You can check if your string starts with http or https using the small function below.
function has_prefix[$string, $prefix] {
return substr[$string, 0, strlen[$prefix]] == $prefix;
}
$url = '//www.google.com';
echo 'the url ' . [has_prefix[$url, '//'] ? 'does' : 'does not'] . ' start with //';
echo 'the url ' . [has_prefix[$url, '//'] ? 'does' : 'does not'] . ' start with //';
Salim
2,2471 gold badge12 silver badges12 bronze badges
answered Jun 19, 2013 at 14:01
TURTLETURTLE
3,5794 gold badges47 silver badges48 bronze badges
1