• Jetzt anmelden. Es dauert nur 2 Minuten und ist kostenlos!

Problem mit Umlaut in URLs

Caspecon

Neues Mitglied
Nachdem ich wirklich schon eine Weile mit PHP etc. arbeite, habe ich dieses Mal ein Problem, welches ich nicht einfach so schnell lösen kann.
Und zwar habe ich mir mit XAMPP Lite (unverändert) für ein Projekt einen localhost geschaffen.

Dieses Projekt habe ich komplett in UTF-8 geschrieben, ebenso die Datenbanken.

Code:
<?xml version="1.0" encoding="utf-8" ?>

(...)

  <meta http-equiv="Content-Type" content="text/html; charset=utf-8" />

(...)
Mein Problem ist, dass Umlaute in Links innerhalb der Seite korrekt übergeben werden. Sobald ich aber diese Adresse manuell eingebe, streikt die Seite, d.h. die $_GET-Variable ist offenbar in der falschen Codierung.

Einfaches Beispiel
Link innerhalb der Seite: index.php?p=München (korrekt)
manuelle Eingabe: index.php?p=M%FCnchen (falsch)

Interessanterweise machen der IE8 und Chrome (im Gegensatz zum FF und Opera) keine Probleme und übernehmen die manuelle Eingabe richtig, d.h. es bleibt ein "ü" in der Adresszeile stehen.

Wo kann ich einen Lösungsansatz finden? Habs leider einfach schon zu lange Google bemüht. :???:
Vielen Dank schonmal.
 
Werbung:
Ich würde mal spontan annehmen, dass in der URL kein ü sondern ein &uuml; zu finden ist, dass dann als ü angezeigt wird.

Ich persönlich habe für solche Zwecke immer eine Konvertierung parat, wo Umlaute von ü auf ue, ä auf ae etc. umgewandelt werden, damit auch Leute aus Amerika oder Japan u.s.w. die Seite erreichen können, wo ein ü im Windows-Zeichensatz generell fehlt.

PHP-Script-Seitig sehe ich kaum eine Chance die Falschinterpretation der Umlaute im Browser abzufangen, eventuell könnte dir ein Javascript eine Funktion zur verfügung stellen, wo die falschen Zeichen durch die richtigen ersetzt werden.
 
Mmh, leider kann es auch nicht wirklich daran liegen oder ich kann es mir zumindest nicht vorstellen, da beispielsweise de.wikipedia.org bei der manuellen Eingabe von "München" auch korrekt arbeitet. Leider bin ich dazu etwas sehr Freizeitprogrammierer, um das richtig einordnen zu können.
Und von der Idee alles auf ue etc. zu machen bin ich nicht so begeistert, außer es ist der einzige Ausweg ... :(
 
Werbung:
Wandel das mit php einfach wieder um.
PHP:
$text = "M%C3%BCnchen";
$text = eregi_replace("%C3%BC", "ü", $text);
echo $text;

Und das machst du dann mit allen Umlauten
 
Kannst du mir mal bitte sagen, was der Sinn ist Umlaute in einer URL zu haben?
Macht gar keinen Sinn.

Deswegen lasse es einfach.
 
Werbung:
Kannst du mir mal bitte sagen, was der Sinn ist Umlaute in einer URL zu haben?
Macht gar keinen Sinn.

Deswegen lasse es einfach.

Der Sinn ist doch ganz klar. Wenn du eine Suche auf deiner Seite programmierst und jemand München als Suchwort eingibt ist da ein Umlaut drin ob man es will oder nich. Selbstverständlich könnte man das Suchformular per POST übertragen, aber ich finde es bei z.B. einer Suche angebrachter über GET, da man so direkt über die URL suchen kann.
 
Zuletzt bearbeitet:
Dieses Projekt habe ich komplett in UTF-8 geschrieben, ebenso die Datenbanken.

Code:
<?xml version="1.0" encoding="utf-8" ?>[/QUOTE]Die XML Deklaration ist überflüssig und versetzt darüber hinaus den IE in den Quirksmode, daher: raus damit!
 
[quote="Caspecon, post: 242538"]
[B]Einfaches Beispiel[/B] 
[U]Link innerhalb der Seite:[/U] index.php?p=München [COLOR=SeaGreen](korrekt)[/COLOR]
[U]manuelle Eingabe:[/U] index.php?p=M%FCnchen [COLOR=Red](falsch)[/QUOTE]das zweite ist ein ü - URL-Kodiert und zwar in iso.
utf-8 kodiert sähe der Link so aus:  index.php?p=M%C3%BCnchen 
Aber du musst die Umlaute gar nicht umwandeln, da das der Browser automatisch macht, wenn es notwendig ist.
 
...einer Suche angebrachter über GET, da man so direkt über die URL suchen kann...

Das ist eine ziemlich schlechte Aussage. Hat gar keine Vorteile. Wenn du die POST Werte in einer Variable speicherst nachdem du Infos verschickt hast hast du genau den gleichen Sinn. Und deine URL hällst du frei von Werten. Daher sehe ich deine Aussage nicht als sehr sinnvoll an.
 
Werbung:
Das ist eine ziemlich schlechte Aussage. Hat gar keine Vorteile. Wenn du die POST Werte in einer Variable speicherst nachdem du Infos verschickt hast hast du genau den gleichen Sinn. Und deine URL hällst du frei von Werten. Daher sehe ich deine Aussage nicht als sehr sinnvoll an.
Wie möchtest du denn sonst einen Link (z.b. hier m Forum) setzen auf ein google Ergebnis? Das geht nur so und ist eine völlig selbstverständlich Sache.
 
Das ist eine ziemlich schlechte Aussage. Hat gar keine Vorteile. Wenn du die POST Werte in einer Variable speicherst nachdem du Infos verschickt hast hast du genau den gleichen Sinn. Und deine URL hällst du frei von Werten. Daher sehe ich deine Aussage nicht als sehr sinnvoll an.

Ja klar es wird von 99% aller Internetseiten so gemacht aber du hälst es für unsinnig. Wie willst du denn wenn du eine Suche programmierst und mehrere Seiten Ergebnisse hast, die Suchvariable weiter geben? Willst du da jedes mal ein Formulr erstellen mit nem hidden Field? Es ist viel schöner dies mit der URL mitzuschicken.

Desweiteren kann man Links auf die Suchergebnisse nicht setzen, da man POST Variablen nicht mit dem Link schicken kann.

Und wenn ich weiß, dass auf der Beispielseite www.beispiel.de die Suchvariable search ist, kann ich bequem in die Adresszeile www.beispiel.de?search=suchwort eingeben.
 
Nahja mit dem mehrere Seite ist ja wohl kein Problem.
Du hast Sessions. Darin kannst du Parameter speichern.

Mit dem Link weiterschicken gebe ich dir Recht.
 
Werbung:
Ein gutes Beispiel wäre auch, wenn du Benutzerprofile programmierst, welche über profil.php?benutzername=Äffchen
Wäre auch sehr unpraktisch dies als POST zu übergeben, da du bei jedem Link nen Formular erstellen müsstest.
 
Wie es scheint habe ich viel zu lange im stillen Kämmchen Zeilen geschrieben und mich solange nicht darum gekümmert, solange es keine Probleme gab. Danke auf jeden Fall für die Tipps!

Bei der Firefoxsache hat zumindest folgendes Problem geholfen:

  • about:config aufrufen
  • network.standard-url.encode-query-utf8 von false auf true setzen
Jetzt wird auch mit der Funktion $_SERVER['QUERY_STRING'] die GET-Variable p richtig im UTF-8 ausgegeben:
Code:
p=M%C3%BCnchen
Doch leider kann ich von den FF Benutzern nicht erwarten in der config herumzuschreiben, um die Seite richtig aufzurufen, auch wenn eine manuelle Eingabe wohl kaum zu erwarten ist. Gibt es trotzdem eine Möglichkeit FF irgendwie mitzuteilen, dass die URL in UTF-8 ausgelesen werden sollte?
 
Werbung:
Mmh, entweder erleide ich gerade eine schwere Form von Denkfehler oder wir reden aneinander vorbei.

Wenn ich bei meinem FF (aktuelle Version und keine Änderungen in der Konfiguration) etwas in die Adresszeile eintippe, ist der Query einfach nicht in UTF-8. Bei Verlinkungen innerhalb des Projekts ist das kein Problem, da stimmt alles Query in UTF-8, nur die manuelle Eingabe macht mir einen Strich durch die Rechnung.

Edit:
Ich weiß zwar nicht, ob es die beste Lösung ist, aber ich habe ein kleines Script geschrieben, welches die Query nach Vorkommen von Nicht-UTF-8-Zeichen durchsucht. Wenn eines gefunden wird, werden diese ersetzt und die Seite neugeladen.
 
Zuletzt bearbeitet:
Nahja mit dem mehrere Seite ist ja wohl kein Problem.
Du hast Sessions. Darin kannst du Parameter speichern.

Mit dem Link weiterschicken gebe ich dir Recht.
In einem Formular habe ich leider keine Session, da die Daten erst beim Absenden verschickt werden und ich erst danach die Session belegen kann. Beim ausfüllen weiss ein Formular nicht, was in den Feldern steht. Da die Infos per URL übergeben werden, gehe ich von einem Formular aus.

Umlaute in der URL zu übergeben ist für mich persönlich ein Horror-Szenario, ich wandle sowas prinzipiell um. wer es ganz heftig, dafür unverwechselbar machen will, kann z.b. base64 encoden, in der url übergeben und dann base64 decoden. dann lassen sich ganze Sätze mit Umlauten, Sonderzeichen etc übergeben.
 
Werbung:
Zurück
Oben