summaryrefslogtreecommitdiffstats
path: root/lib/private/legacy
diff options
context:
space:
mode:
Diffstat (limited to 'lib/private/legacy')
-rw-r--r--lib/private/legacy/OC_Util.php28
1 files changed, 22 insertions, 6 deletions
diff --git a/lib/private/legacy/OC_Util.php b/lib/private/legacy/OC_Util.php
index 35c81dd34e6..078e3cf9a03 100644
--- a/lib/private/legacy/OC_Util.php
+++ b/lib/private/legacy/OC_Util.php
@@ -1239,22 +1239,38 @@ class OC_Util {
}
/**
- * Check if the setlocal call does not work. This can happen if the right
+ * Check if current locale is non-UTF8
+ *
+ * @return bool
+ */
+ private static function isNonUTF8Locale() {
+ if (function_exists('escapeshellcmd')) {
+ return '' === escapeshellcmd('§');
+ } elseif (function_exists('escapeshellarg')) {
+ return '\'\'' === escapeshellarg('§');
+ } else {
+ return 0 === preg_match('/utf-?8/i', setlocale(LC_CTYPE, 0));
+ }
+ }
+
+ /**
+ * Check if the setlocale call does not work. This can happen if the right
* local packages are not available on the server.
*
* @return bool
*/
public static function isSetLocaleWorking() {
- if ('' === basename('§')) {
+ if (self::isNonUTF8Locale()) {
// Borrowed from \Patchwork\Utf8\Bootup::initLocale
setlocale(LC_ALL, 'C.UTF-8', 'C');
setlocale(LC_CTYPE, 'en_US.UTF-8', 'fr_FR.UTF-8', 'es_ES.UTF-8', 'de_DE.UTF-8', 'ru_RU.UTF-8', 'pt_BR.UTF-8', 'it_IT.UTF-8', 'ja_JP.UTF-8', 'zh_CN.UTF-8', '0');
- }
- // Check again
- if ('' === basename('§')) {
- return false;
+ // Check again
+ if (self::isNonUTF8Locale()) {
+ return false;
+ }
}
+
return true;
}