Skip to content

Commit

Permalink
Fixed encoding
Browse files Browse the repository at this point in the history
  • Loading branch information
thedava committed Nov 24, 2017
1 parent 4c796da commit 76a9081
Show file tree
Hide file tree
Showing 2 changed files with 21 additions and 7 deletions.
14 changes: 12 additions & 2 deletions src/Xspf/Filter/FileUrlFilter.php
Original file line number Diff line number Diff line change
Expand Up @@ -4,6 +4,11 @@

class FileUrlFilter
{
const REPLACE = [
'%28' => '(',
'%29' => ')',
];

/**
* @param string $location
* @param string $directorySeparator
Expand All @@ -14,7 +19,9 @@ public static function filter($location, $directorySeparator = DIRECTORY_SEPARAT
{
$parts = explode($directorySeparator, $location);
list($first) = $parts;
$parts = array_map('rawurlencode', $parts);
array_walk($parts, function (&$value) {
$value = rawurlencode(utf8_encode($value));
}, $parts);

// Check if windows
if (preg_match('/^[A-Z]\:$/', $first)) {
Expand All @@ -24,6 +31,9 @@ public static function filter($location, $directorySeparator = DIRECTORY_SEPARAT
unset($parts[1], $parts[2]);
}

return 'file://' . implode('/', $parts);
$file = 'file://' . implode('/', $parts);

// Apply replaces
return str_replace(array_keys(self::REPLACE), array_values(self::REPLACE), $file);
}
}
14 changes: 9 additions & 5 deletions test/XspfTest/Filter/FileUrlFilterTest.php
Original file line number Diff line number Diff line change
Expand Up @@ -9,20 +9,24 @@ class FileUrlFilterTest extends \PHPUnit_Framework_TestCase
public function fileUrlDataProvider()
{
return [
//
// Windows
['C:\Video\video.mp4', '\\', 'file:///C:/Video/video.mp4'],
['C:\Video\spaces video.mp4', '\\', 'file:///C:/Video/spaces%20video.mp4'],
['C:\Video\(strange) symbols video.mp4', '\\', 'file:///C:/Video/%28strange%29%20symbols%20video.mp4'],

['C:\Video\(strange) symbols video.mp4', '\\', 'file:///C:/Video/(strange)%20symbols%20video.mp4'],
//
// Windows (Cygwin)
['/cygdrive/c/Video/video.mp4', '/', 'file:///C:/Video/video.mp4'],
['/cygdrive/c/Video/spaces video.mp4', '/', 'file:///C:/Video/spaces%20video.mp4'],
['/cygdrive/c/Video/(strange) symbols video.mp4', '/', 'file:///C:/Video/%28strange%29%20symbols%20video.mp4'],

['/cygdrive/c/Video/(strange) symbols video.mp4', '/', 'file:///C:/Video/(strange)%20symbols%20video.mp4'],
//
// Linux
['/home/user/video/video.mp4', '/', 'file:///home/user/video/video.mp4'],
['/home/user/video/spaces video.mp4', '/', 'file:///home/user/video/spaces%20video.mp4'],
['/home/user/video/(strange) symbols video.mp4', '/', 'file:///home/user/video/%28strange%29%20symbols%20video.mp4'],
['/home/user/video/(strange) symbols video.mp4', '/', 'file:///home/user/video/(strange)%20symbols%20video.mp4'],
//
// Official examples
['/mp3s/Yo La Tengo/5_Nuclear War Version 4 (Mike Ladd Remix).mp3', '/', 'file:///mp3s/Yo%20La%20Tengo/5_Nuclear%20War%20Version%204%20(Mike%20Ladd%20Remix).mp3'],
];
}

Expand Down

0 comments on commit 76a9081

Please sign in to comment.