diff options
author | Andreas Gohr <andi@splitbrain.org> | 2012-07-28 09:59:01 +0200 |
---|---|---|
committer | Andreas Gohr <andi@splitbrain.org> | 2012-07-28 09:59:01 +0200 |
commit | f393a4eb51a5f8ed0e64f09f76cbafe57d7dcb57 (patch) | |
tree | 76c2def20593be48017b66e4f0498d04f6d62dde /inc/utf8.php | |
parent | e5ab313f460502d6879db851a6a0201727bc6344 (diff) | |
download | rpg-f393a4eb51a5f8ed0e64f09f76cbafe57d7dcb57.tar.gz rpg-f393a4eb51a5f8ed0e64f09f76cbafe57d7dcb57.tar.bz2 |
added utf8_basename()
This is a locale independent version of basename to work around
https://bugs.php.net/bug.php?id=37738
The function is not yet used anywhere. It should be at least used
where ever non-ASCII filenames and paths are handled. Simply replacing
all calls to basename() with this function might be the safest.
Diffstat (limited to 'inc/utf8.php')
-rw-r--r-- | inc/utf8.php | 25 |
1 files changed, 25 insertions, 0 deletions
diff --git a/inc/utf8.php b/inc/utf8.php index 7b7c19c6b..227fa830a 100644 --- a/inc/utf8.php +++ b/inc/utf8.php @@ -78,6 +78,31 @@ if(!function_exists('utf8_check')){ } } +if(!function_exists('utf8_basename')){ + /** + * A locale independent basename() implementation + * + * works around a bug in PHP's basename() implementation + * + * @see basename() + * @link https://bugs.php.net/bug.php?id=37738 + * @param string $path A path + * @param string $suffix If the name component ends in suffix this will also be cut off + * @return string + */ + function utf8_basename($path, $suffix=''){ + $rpos = max(strrpos($path, '/'), strrpos($path, '\\')); + $file = substr($path, $rpos+1); + + $suflen = strlen($suffix); + if($suflen && (substr($file, -$suflen) == $suffix)){ + $file = substr($file, 0, -$suflen); + } + + return $file; + } +} + if(!function_exists('utf8_strlen')){ /** * Unicode aware replacement for strlen() |