]> Raphaƫl G. Git Repositories - userbundle/blobdiff - Utils/Slugger.php
Use ICU Transliterator transliterate feature when available
[userbundle] / Utils / Slugger.php
index 217251511d0a204549d83db6ec9c79b5ffbe4476..9a33e6dca46b6b780f21411e19b9062f46ed421a 100644 (file)
@@ -23,7 +23,7 @@ class Slugger {
        //Retrieve secret and set offset from reduction
        public function __construct(ContainerInterface $container) {
                //Set secret
-               $this->secret = $container->getParameter('kernel.secret');
+               $this->secret = $_SERVER['APP_SECRET'] ?? $container->getParameter('kernel.secret');
 
                //Pseudo-random alphabet
                //XXX: use array flip and keys to workaround php "smart" that cast range('0', '9') as int instead of string
@@ -66,7 +66,7 @@ class Slugger {
        }
 
        //Short the string
-       public function short($string) {
+       public function short(string $string): string {
                //Return string
                $ret = '';
 
@@ -83,7 +83,7 @@ class Slugger {
        }
 
        //Unshort the string
-       public function unshort($string) {
+       public function unshort(string $string): string {
                //Return string
                $ret = '';
 
@@ -98,12 +98,17 @@ class Slugger {
        }
 
        //Crypt and base64uri encode string
-       public function hash($string) {
+       public function hash(string $string): string {
                return str_replace(['+','/'], ['-','_'], base64_encode(crypt($string, $this->secret)));
        }
 
        //Convert string to safe slug
-       function slug($string) {
+       function slug(string $string): string {
+               //Use Transliterator if available
+               if (class_exists('Transliterator')) {
+                       $trans = Transliterator::create('Any-Latin; Latin-ASCII; Lower()');
+                       return preg_replace(['/[^a-zA-Z0-9\.]+/', '/(^-+|-+$)/', '/\.[^\.]+$/'], ['-', '', ''], $trans->transliterate($string));
+               }
                return preg_replace('/[\/_|+ -]+/', '-', strtolower(trim(preg_replace('/[^a-zA-Z0-9\/_|+ -]/', '', str_replace(['\'', '"'], ' ', iconv('UTF-8', 'ASCII//TRANSLIT', $string))), '-')));
        }
 }