Automatische Spracherkennung vom Browser

Accept-Language enthält eine Liste bewerteter Werte. Die Wertung erfolgt über den optionalen q-Parameter, der Werte zwischen 1 und 0 einschließlich erlaubt. 1 heißt absolute bevorzugt, 0 heißt nicht akzeptabel; fehlt der Wert, wird 1 angenommen. Die Reihenfolge der Werte spielt hingegen erst einmal keine Rolle.
Diese Liste von Werten solltest du nun parsen und der Bewertung nach ordnen und kannst so den Wert mit der größten Übereinstimmung zwischen den akzeptierten und deinen verfügbaren Werten ausfindig machen. Nun erst kannst du die Reihenfolge der Werte in Betracht ziehen, um etwa den ersten zweier oder mehrerer gleichbewerteter Werte zu wählen.

Siehe dazu auch den Wikipedia-Artikel zu Content Negotiation.
 
PHP:
preg_match_all('~[a-z]{2,}\;q=([0-1]{1}\.{0,}[0-9])~', $_SERVER['HTTP_ACCEPT_LANGUAGE'], $matches);

for($i=0;$i<count($matches[1])-1;++$i){if($matches[1][$i]>=0.5){ echo substr($matches[0][$i],0,2); break;}}


Ansonsten wäre vll auch die Funktion get_browser() für dich interessant denke ich mal ;)
 
Zuletzt bearbeitet:
Du solltest auch auf andere Varianten achten. Die Sprach-Tags können auch spezifischer sein (etwa de-ch für Schweizerdeutsch), kein Qualitätsparameter haben und auch Leerzeichen zwischen den einzelnen Teilen enthalten.
 
Das hat doch gar nichts mit Manipulation zu tun. Allein dass es erlaubt ist, sollte Grund genug dafür sein, um diese Lösung als nicht ausreichend abzulehnen.
 
Falls wer den Header manipuliert hast du pech gehabt.
Das ganze system ist nicht sicher da die variablen nunmal manipuliert sein können.
Traue nie einer Uservariablen ;)
 
Hallo zusammen,

habe diesen Beitrag von Anfang an aufmerksam gelesen und versucht 1:1 umzusetzen. Leider ohne Erfolg. Daher meine Frage ob jemand sich die Mühe machen könnte meine step-by-step Anleitung Korrektur zu lesen?

Ich wiederhole kurz mein Vorgehen:

1. Den nachfolgenden PHP Code kopiere ich in den Windows Editor und speicher die Datei unter dem Namen index.php ab

2. Diese Datei lade ich dann per FTP Programm in das Stammverzeichnis (root Verzeichnis) auf meinem Webspeicher

3. Nun benenne ich die einzelnen index Seiten in index_de.html + index_en.html + index_es.html

Zum Testen stelle ich meinen Firefox auf die bevorzugte Sprache englisch ein (Extras --> Einstellungen --> Inhalt --> Sprachen).

Und nun?

Wer sich die Sache mal live anschauen möchte: www.notebookdesign.com

Hier der verwendete Code

PHP:
<?php 
$sprache = @getenv('HTTP_ACCEPT_LANGUAGE'); 

if(ereg("es",$sprache)) { 
      header("Location: index_es.html"); 
}  
else if(ereg("en",$sprache)) { 
      header("Location: index_en.html"); 
} 
else if(ereg("de",$sprache)) { 
      header("Location: index_de.html"); 
} 
else{ 
      header("Location: index_en.html"); 
} 
 ?>
 
Zurück