naden.de Bookmarken

PHP Redirect

15. Januar 2010 | In: Php

PHP Redirects von Domains sind ein alter Hut. Während man Domains ohne Sonderzeichen problemlos mittels header(‘Location: …’); oder Meta-Refresh umleiten kann, hat man bei Sonderzeichen in Domainnamen ein Problem.

Der Meta-Refresh funktioniert zwar noch immer, der Redirect mittels header(‘Location: …’); aus PHP heraus leider nicht.

Die folgende Funktion zerlegt die Url’s in ihre Bestandteile, dann wird der Hostname in Punnycode codiert und die Url wieder zusammengbaut.

Der Aufruf von idn_redirect(‘http://www.öko.de/’); leitet auf http://www.xn--ko-eka.de/

function idn_redirect($url, $permanent = true) {
 
  include_once 'Net/IDNA.php';
 
  $idn = Net_IDNA::getInstance();
 
  $tokens = parse_url($url);
 
  $target = $tokens['scheme'] . '://';
 
  if(array_key_exists('user', $tokens) && array_key_exists('pass', $tokens)) {
    $target .= $tokens['user']. ':'. $tokens['pass']. '@';
  }
 
  try {
    $host = $idn->encode($tokens['host']);
  }
  catch(Exception $ex) {
  }
 
  if(isset($host)) {
    $target .= $host;
  }
  else {
    $target .= $tokens['host'];
  }
 
  if(array_key_exists('port', $tokens) && !empty($tokens['port'])) {
    $target .= ':'. $tokens['port'];
  }
 
  if(array_key_exists('path', $tokens) && !empty($tokens['path'])) {
    $target .= $tokens['path'];
  }
 
  if(array_key_exists('query', $tokens) && !empty($tokens['query'])) {
    $target .= '?'. $tokens['query'];
  }
 
  if(array_key_exists('fragment', $tokens) && !empty($tokens['fragment'])) {
    $target .= '#'. $tokens['fragment'];
  }
 
  if(!headers_sent()) {
    if($permanent) {
      header('HTTP/1.1 301 Moved permanently.');
    }
		header('Location: ' . $target);
  }
	else {
    printf('<html><head><meta http-equiv="refresh" content="0;URL=%s"></meta></head><body><a href="%s">%s</a></body></html>', $target, $target, $target);
  }
  exit;
}

Die Funktion nutzt die IDN-Funktionen von http://pecl.php.net/package/idn.

Bewertung: najagut
Loading ... Loading ...

Ähnliche Beiträge

Schreib einen Kommentar

Fülle das Kommentar-Formular vollständig aus oder melde dich über Twitter oder Facebook an.
Sign in with Facebook

By Teledir Internetanbieter