php - Remove subdomain from URL/host to match domains in affiliate link array
one text
Solution:
Thank you for updating your answer with the code you have and explaining what the actual problem is. Since your reference array for the affiliate links is indexed by base domain, we will need to normalize the hostname to remove any possible subdomains. Right now you have:
$host = str_ireplace('www.', '', $host);
Which will do the job only if the subdomain is www.
, obviously. Now, one might be tempted to simply explode
by .
and take the last two components. However that'd fail with your .co.id
and other second-level domains. We're better off using a regular expression.
One could craft a universal regular expression that handles all possible second-level domains (co., net., org.; edu.,...) but that'd become a long list. For your use case, since your list currently only has the .com
, .in
and .co.in
domain extensions, and is unlikely to have many more, we'll just hard-code these into the regex to keep things fast and simple:
$host = preg_replace('#^.*?([^.]+\.)(com|id|co\.id)$#i', '\1\2', $host);
To explain the regex we're using:
^
start-of-subject anchor;.*?
ungreedy optional match for any characters (if a subdomain -- or a sub-sub-domain exists);([^.]+\.)
capturing group for non-.
characters followed by.
(main domain name)(com|id|co\.id)
capturing group for domain extension (add to list as necessary)$
end-of-subject anchor
Then we replace the hostname with the contents of the capture groups that matched domain. and its extension. This will return example.com
for www.example.com
, foo.bar.example.com
-- or example.com
; and example.co.id
for www.example.co.id
, foo.bar.example.co.id
-- or example.co.id
. This should help your script work as intended. If there are further problems, please update the OP and we'll see what solutions are available.