HTML &PHP Umlaute und Leerzeichen werden nicht beachtet.

DefconDev

Commander
Registriert
Jan. 2008
Beiträge
2.538
Hallo zusammen,

ich habe in einer PHP File ein Array. Innerhalb dieses Array werden Bezeichnungen ausgelesen.
PHP:
<a href=http://www.blabla.de/images/$bezeichnung[$i].jpg>

die dienen zur vervollständigung des Image-path. Alle Bilder ohne Umlaute funktionieren tadelos. Sobald aber Umlaute auftauchen wird die Quelle nicht gefunden. Gleiches Problem mit Wörtern/Sätze die ein Leerzeichen dazwischen haben, wie "ich habe".jpg die werden auch nicht gefunden.

Worin liegt sowas begründet?
 
Im Internationalen World Wide Web gibt es keine Sonderzeichen. Deswegen sind Sonderzeichen z.B. auch in E-Mail-Adressen und URLs nicht erlaubt. Außnahme im Deutschsprachigen Raum sind URLs wie www.köln.de das wird durch die DENIC umgesetzt in www.koeln.de oder www.koln.de

Heißt selbst wenn z.B. Leerzeichen in Dateinamen funktionieren würden, sollte das tunlichst vermieden werden. Gleiches gilt für Sonderzeichen wie ö, ä, ü, ß etc. Das sind im WWW alles ungültige Zeichen.
 
Hi,
sind da keine Anführungszeichen vor und nach den URLs angegeben?
MfG,
IRID1UM
 
Danke dir für die Antwort. Dachte UTF 8 würde da eine Rolle spielen.

Ok. Sachen wie Unterstrich kann ich verwenden? Wo kann ich einsehen welche Zeichen erlaubt sind?
Ergänzung ()

IRID1UM schrieb:
Hi,
sind da keine Anführungszeichen vor und nach den URLs angegeben?
MfG,
IRID1UM

Nein. Die habe ich nur hier angegeben.
 
Hades85 schrieb:
PHP:
<a href=http://www.blabla.de/images/$bezeichnung[$i].jpg>

die dienen zur vervollständigung des Image-path. Alle Bilder ohne Umlaute funktionieren tadelos. Sobald aber Umlaute auftauchen wird die Quelle nicht gefunden. Gleiches Problem mit Wörtern/Sätze die ein Leerzeichen dazwischen haben, wie "ich habe".jpg die werden auch nicht gefunden.
Grundsätzlich sind die Zeichen in einer URL auf ein Subset von ASCII begrenzt. Das heißt aber nicht, dass man keine Umlaute oder Leerzeichen einbauen kann. Man muss sie nur entsprechend kodieren.
Dabei werden solche "ungültigen" Zeichen durch entsprechende Codes ersetzt. Ein Leerzeichen beispielsweise durch %20

Eigentlich bieten auch Webframeworks i.d.R. fertige Funktionen dafür.
Evtl. wäre rawurlencode passend dafür.

Gruß
Andy
 
@andy_m4: Ist trotzdem im Web nach Möglichkeit zu vermeiden.

ü = &uuml;
ä = &auml;
ö = &ouml;

Geht alles, ist aber nicht optimal und verursacht Probleme.
 
Bis jetzt sind alle Antworten etwas unvollständig. Was genau erlaubt ist, hängt immer vom Kontext ab.

Mal eins nach dem anderen:
Eine URL besteht aus Domain (zur Identifizierung des hosts) und den Pfad (das /... danach).
Domain Namen dürfen nur gewisse ASCII Zeichen enthalten. Sonderzeichen werden vom Browser entsprechend codiert [1].
Im Pfad darf praktisch alles stehen. Es hängt vom Server ab, wie er interpretiert wird. Er wird aber vom Browser per "Percent-encoding" [2] codiert, das muss der Server entsprechen rückgängig machen.
Allgemein sorgen Browser dafür, dass keine "ungültigen" URL's entstehen. Dann würde die Netzwerkkommunikation eh fehlschlagen.
Beim generieren der HTML Seite muss man aber auf das richtige Escaping achten! Also in Attributen mindestens " und ' ersetzten. Sonst erzeugt man im schlimmsten fall XSS Lücken. PHP hat entsprechende Funktionen zum HTML Escapen.
Für HTML einfach utf-8 nehmen. Das sollte auch im HTTP Header so mitgeteilt werden. Dann funktionieren alle Sonderzeichen ohne Probleme. Umlaute sollten im Jahr 2015 nicht mehr ersetzt werden müssen :D

Was in Datei-Pfaden erlaubt es hängt komplett vom verwendeten System ab.

1. https://de.wikipedia.org/wiki/Punycode
2. https://de.wikipedia.org/wiki/URL-Encoding
 
Zurück
Oben