summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--_test/tests/inc/utf8_basename.test.php17
-rw-r--r--inc/utf8.php7
2 files changed, 19 insertions, 5 deletions
diff --git a/_test/tests/inc/utf8_basename.test.php b/_test/tests/inc/utf8_basename.test.php
index 475b7ada8..1544e9915 100644
--- a/_test/tests/inc/utf8_basename.test.php
+++ b/_test/tests/inc/utf8_basename.test.php
@@ -64,8 +64,23 @@ class utf8_basename_test extends DokuWikiTest {
array('bar.test.png', '.png', 'bar.test'),
array('/bar.test.png', '', 'bar.test.png'),
- array('\\bar.test.png', '', 'bar.test.png'),
array('/bar.test.png', '.png', 'bar.test'),
+ array('\\bar.test.png', '', 'bar.test.png'),
+ array('\\bar.test.png', '.png', 'bar.test'),
+ array('\\/bar.test.png', '', 'bar.test.png'),
+ array('\\/bar.test.png', '.png', 'bar.test'),
+ array('/\\bar.test.png', '', 'bar.test.png'),
+ array('/\\bar.test.png', '.png', 'bar.test'),
+
+ // PHP's basename does this too:
+ array('foo/', '', 'foo'),
+ array('foo\\', '', 'foo'),
+ array('foo\\/', '', 'foo'),
+ array('foo/\\', '', 'foo'),
+ array('foo.png/', '.png', 'foo'),
+ array('foo.png\\', '.png', 'foo'),
+ array('foo.png\\/', '.png', 'foo'),
+ array('foo.png/\\', '.png', 'foo'),
);
foreach($data as $test){
diff --git a/inc/utf8.php b/inc/utf8.php
index e3e7e8c1a..6fab8502c 100644
--- a/inc/utf8.php
+++ b/inc/utf8.php
@@ -91,10 +91,9 @@ if(!function_exists('utf8_basename')){
* @return string
*/
function utf8_basename($path, $suffix=''){
- $slashrpos = strrpos($path, '/');
- $bslashrpos = strrpos($path, '\\');
- $rpos = max($slashrpos === false ? -1 : $slashrpos, $bslashrpos === false ? -1 : $bslashrpos);
- $path = substr($path, $rpos+1);
+ $path = trim($path,'\\/');
+ $rpos = max(strrpos($path, '/'), strrpos($path, '\\'));
+ if($rpos) $path = substr($path, $rpos+1);
$suflen = strlen($suffix);
if($suflen && (substr($path, -$suflen) == $suffix)){