aboutsummaryrefslogtreecommitdiffstats
path: root/apps
diff options
context:
space:
mode:
Diffstat (limited to 'apps')
-rw-r--r--apps/user_ldap/lib/Access.php15
-rw-r--r--apps/user_ldap/tests/AccessTest.php8
2 files changed, 10 insertions, 13 deletions
diff --git a/apps/user_ldap/lib/Access.php b/apps/user_ldap/lib/Access.php
index 7b7ae74d3f3..d981bf0e54b 100644
--- a/apps/user_ldap/lib/Access.php
+++ b/apps/user_ldap/lib/Access.php
@@ -1433,12 +1433,15 @@ class Access extends LDAPUtility {
return $name;
}
- // Transliteration to ASCII
- $transliterated = @iconv('UTF-8', 'ASCII//TRANSLIT', $name);
- if ($transliterated !== false) {
- // depending on system config iconv can work or not
- $name = $transliterated;
- }
+ // Use htmlentities to get rid of accents
+ $name = htmlentities($name, ENT_NOQUOTES, 'UTF-8');
+
+ // Remove accents
+ $name = preg_replace('#&([A-za-z])(?:acute|cedil|caron|circ|grave|orn|ring|slash|th|tilde|uml);#', '\1', $name);
+ // Remove ligatures
+ $name = preg_replace('#&([A-za-z]{2})(?:lig);#', '\1', $name);
+ // Remove unknown leftover entities
+ $name = preg_replace('#&[^;]+;#', '', $name);
// Replacements
$name = str_replace(' ', '_', $name);
diff --git a/apps/user_ldap/tests/AccessTest.php b/apps/user_ldap/tests/AccessTest.php
index 5945bbd2fde..c0cc856d143 100644
--- a/apps/user_ldap/tests/AccessTest.php
+++ b/apps/user_ldap/tests/AccessTest.php
@@ -689,16 +689,13 @@ class AccessTest extends TestCase {
}
public function intUsernameProvider() {
- // system dependent :-/
- $translitExpected = @iconv('UTF-8', 'ASCII//TRANSLIT', 'fränk') ? 'frank' : 'frnk';
-
return [
['alice', 'alice'],
['b/ob', 'bob'],
['charly🐬', 'charly'],
['debo rah', 'debo_rah'],
['epost@poste.test', 'epost@poste.test'],
- ['fränk', $translitExpected],
+ ['fränk', 'frank'],
[' gerda ', 'gerda'],
['🕱🐵🐘🐑', null],
[
@@ -732,9 +729,6 @@ class AccessTest extends TestCase {
* @param $expected
*/
public function testSanitizeUsername($name, $expected) {
- if ($name === 'fränk' && PHP_MAJOR_VERSION > 7) {
- $this->markTestSkipped('Special chars do boom still on CI in php8');
- }
if ($expected === null) {
$this->expectException(\InvalidArgumentException::class);
}