Replace iconv() calls with Transliterator

See https://stackoverflow.com/a/35178027/954513

Closes #5377

Signed-off-by: Kevin Decherf <kevin@kdecherf.com>
This commit is contained in:
Kevin Decherf 2022-03-20 22:51:27 +01:00
parent 194c87e363
commit 1608bf5a4e
5 changed files with 10 additions and 9 deletions

View file

@ -40,6 +40,7 @@
"ext-gd": "*",
"ext-hash": "*",
"ext-iconv": "*",
"ext-intl": "*",
"ext-json": "*",
"ext-mbstring": "*",
"ext-pcre": "*",

View file

@ -236,7 +236,9 @@ class ContentProxy
return $rawText;
}
return iconv('UTF-8', 'UTF-8//IGNORE', $rawText);
mb_substitute_character('none');
return mb_convert_encoding($rawText, 'UTF-8', 'UTF-8');
}
/**

View file

@ -527,6 +527,8 @@ class EntriesExport
*/
private function getSanitizedFilename()
{
return preg_replace('/[^A-Za-z0-9\- \']/', '', iconv('utf-8', 'us-ascii//TRANSLIT', $this->title));
$transliterator = \Transliterator::createFromRules(':: Any-Latin; :: Latin-ASCII; :: NFD; :: [:Nonspacing Mark:] Remove; :: NFC;', \Transliterator::FORWARD);
return preg_replace('/[^A-Za-z0-9\- \']/', '', $transliterator->transliterate($this->title));
}
}

View file

@ -347,6 +347,8 @@ class ExportControllerTest extends WallabagCoreTestCase
private function getSanitizedFilename($title)
{
return preg_replace('/[^A-Za-z0-9\- \']/', '', iconv('utf-8', 'us-ascii//TRANSLIT', $title));
$transliterator = \Transliterator::createFromRules(':: Any-Latin; :: Latin-ASCII; :: NFD; :: [:Nonspacing Mark:] Remove; :: NFC;', \Transliterator::FORWARD);
return preg_replace('/[^A-Za-z0-9\- \']/', '', $transliterator->transliterate($title));
}
}

View file

@ -455,12 +455,6 @@ class SymfonyRequirements extends RequirementCollection
);
}
$this->addRequirement(
function_exists('iconv'),
'iconv() must be available',
'Install and enable the <strong>iconv</strong> extension.'
);
$this->addRequirement(
function_exists('json_encode'),
'json_encode() must be available',