Solved

Script to geolocate user and redirect them to the local website

Posted on 2010-09-10
4
826 Views
Last Modified: 2012-05-10
Hello,

We are looking for a script that we can drop into our site that will geolocate a user downloading a web page a redirect them to a localised version of the website. For example, if a person in UK access the site then they should be redirected to the .co.uk version of the site.

Thanks
0
Comment
Question by:PlumInternet
  • 2
4 Comments
 
LVL 82

Accepted Solution

by:
leakim971 earned 167 total points
ID: 33651138
You may use : navigator.userLanguage

Some links :

http://www.cryer.co.uk/resources/javascript/script9.htm
http://xrdp.sourceforge.net/documents/keymap/rfc1766.html
http://www.cryer.co.uk/resources/javascript/script9.htm
http://www.w3.org/TR/html401/references.html#ref-ISO3166
http://fr.wikipedia.org/wiki/ISO_3166-1
http://en.wikipedia.org/wiki/List_of_ISO_639-1_codes
http://www.ietf.org/rfc/rfc1766.txt

example of using :


<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
<html xmlns="http://www.w3.org/1999/xhtml">

<head>
<meta http-equiv="Content-Language" content="en-us" />
<meta http-equiv="Content-Type" content="text/html; charset=utf-8" />
<title>IPHONE REDIRECT PAGE</title>

<script language="javascript">
  switch(navigator.userLanguage.toLowerCase()) {
      case "en-us": window.location = 'http://www.domain.us';break;
      case "en-gb": window.location = 'http://www.domain.co.uk';break;
      case "fr-fr": window.location = 'http://www.domain.fr';break;
      case "de-ch": window.location = 'http://www.domain.ch';break;
      default:      window.location = 'http://www.domain.com';break;
  }
</script>

</head>

<body>

<p>see this - redirect did not work</p>

</body>

</html>

Open in new window

0
 
LVL 10

Assisted Solution

by:bugada
bugada earned 167 total points
ID: 33652703
there is another solution based on IP detection: some sites offer a donwloadble database with association between IP and location.

A free site is http://ip-to-country.webhosting.info/
 
you can download it regularly  using following code to insert it in your database (maybe put this php in crontab).

Then in your home page retrieve the ip of the visitor and ask to db the country associated, do proper redirection.
<?php

require_once('pclzip.lib.php');
ini_set('max_execution_time', 0);

echo "updating ip2location database...";

copy('http://ip-to-country.webhosting.info/downloads/ip-to-country.csv.zip', 'downloads/ip-to-country.csv.zip');

$archive = new PclZip('./downloads/ip-to-country.csv.zip');
$list = $archive->extract(PCLZIP_OPT_PATH, '.');

$db = mysql_connect("localhost", "root", "password");
mysql_select_db("free2design", $db);

$query = "DELETE FROM free_ip_locations";
$result = mysql_query($query, $db);

$values = '';
$lines = file('ip-to-country.csv');
foreach ($lines as $line) {

$data = explode(',', $line);

$ip_from = trim($data[0], "\"");
$ip_to = trim($data[1], "\"");
$code = trim($data[2], "\"");
$name = trim(trim($data[4]), "\"");

$query = "INSERT INTO free_ip_locations (ip_from, ip_to, code, name) VALUES ($ip_from,$ip_to,'$code','$name')";
$result = mysql_query($query, $db);
}
mysql_close($db);

echo "done";
exit();

?>

Open in new window

0
 
LVL 6

Assisted Solution

by:birwin
birwin earned 166 total points
ID: 33657528
A simple method, using the Google API, can be found at:
http://designshack.co.uk/articles/javascript/detecting-location-using-google-ajax-api#more-1546
I used a more sophisticated method  for a client, of downloading an open source database, and searching it. The results were good, but not consistantly good.
Unless you are willing to pay a monthly fee for the most advanced, commercial databases, and update your database weekly, do not trust the results, and make sure that you have a "Plan B". I had written some code, expecting to always get a location answer, and had to rewrite it, after getting results that I couldn't duplicate. The issue was that some hosts don't supply usable IP address data, so what works on your machine, with your host, won't work on all.
So depending on your need for accuracy you can try:
A free database is available at http://www.maxmind.com/download/geoip/database/GeoIPCountryCSV.zip
A PHP class to read it is available at:
http://phpweby.com/software/ip2country

0
 
LVL 82

Expert Comment

by:leakim971
ID: 33659425
You're welcome! Thanks for the points!
0

Featured Post

3 Use Cases for Connected Systems

Our Dev teams are like yours. They’re continually cranking out code for new features/bugs fixes, testing, deploying, testing some more, responding to production monitoring events and more. It’s complex. So, we thought you’d like to see what’s working for us.

Question has a verified solution.

If you are experiencing a similar issue, please ask a related question

Suggested Solutions

This article discusses how to create an extensible mechanism for linked drop downs.
Any business that wants to seriously grow needs to keep the needs and desires of an international audience of their websites in mind. Making a website friendly to international users isn’t prohibitively expensive and can provide an incredible return…
The viewer will learn how to dynamically set the form action using jQuery.
The viewer will learn how to count occurrences of each item in an array.

831 members asked questions and received personalized solutions in the past 7 days.

Join the community of 500,000 technology professionals and ask your questions.

Join & Ask a Question