Felix Riesterer: Codierung: Mein mp3-player versteht mich nicht

Beitrag lesen

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:)