Lieber Linuchs,
du hast nicht kontext-gerecht enkodiert! Schauen wir uns Dein Datum (die URL) genauer an:
http://www.shanty-chor-kieler-foerde.de/Kieler Förde.mp3
Das Protokoll (http), die Abtrennung desselben vom Domain-Namen (://), die Subdomain (www), die Abtrennung der einzelnen Subdomains (.), die Hauptdomain (shanty-chor-kieler-foerde), die Abtrennung von der Top-Level-Domain (.), die Top-Level-Domain (de) und den Beginn des "lokalen Pfads" (/).
Alles obige betrifft die Adressierung des Zielrechners und ist bereits korrekt enkodiert:
http://www.shanty-chor-kieler-foerde.de/
Dieser Bestandteil der "Adresse" benötigt also keine Behandlung mit urlencode(). Das ist wichtig!
Nun schauen wir uns den lokalen Pfad auf dem Zielserver an:
/Kieler Förde.mp3
Jetzt wird es interessant! Dateinamen müssen mit urlencode() oder rawurlencode() behandelt werden, die Trennzeichen zwischen den verschiedenen Verzeichnis- oder Dateiamen dagegen nicht!
Im Ergebnis müsstest Du also notieren:
$url = array(
'host' => preg_split('~^(https?://[^/]+/).*~', '$1', $row['url']),
'path' => ''
);
// Pfad an den Trennzeichen auftrennen...
$url['path'] = explode('/', str_replace($url['host'], '', $row['url']));
// ... und jeden Teil URL-enkodieren
foreach ($url['path'] as $i => $name) {
$url['path'][$i] = urlencode($name);
}
$url_encoded = $url['host'].implode('/', $url['path']);
Wahrscheinlich werden nun auch die Punkte im Dateinamen enkodiert - keine Ahnung ob das stört...
Liebe Grüße,
Felix Riesterer.
ie:% br:> fl:| va:) ls:[ fo:) rl:| n4:? de:> ss:| ch:? js:) mo:} zu:)