summaryrefslogtreecommitdiff
path: root/inc/utf8.php
diff options
context:
space:
mode:
authorAndreas Gohr <andi@splitbrain.org>2012-07-28 09:59:01 +0200
committerAndreas Gohr <andi@splitbrain.org>2012-07-28 09:59:01 +0200
commitf393a4eb51a5f8ed0e64f09f76cbafe57d7dcb57 (patch)
tree76c2def20593be48017b66e4f0498d04f6d62dde /inc/utf8.php
parente5ab313f460502d6879db851a6a0201727bc6344 (diff)
downloadrpg-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.php25
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()