Source of file StringHelper.php
Size: 4,392 Bytes - Last Modified: 2023-11-16T22:56:02+01:00
/home/websites/teicee/packagist/site/phpdoc/conf/../vendor/teicee/core-bundle/src/Util/StringHelper.php
| 123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114 | <?phpnamespace TIC\CoreBundle\Util; /** * Méthodes statiques utilitaires pour convertir des chaines de caractères. */class StringHelper {/** * This class should not be instantiated. */private function __construct() { } /** * Retourne une chaine ASCII en convertissant les caractères étendus. * * @param string $text Texte en UTF-8 à transformer * @return string Chaine équivalente avec les caractères 7 bits */public static function asciify(string $text): string { return \preg_replace_callback('/([\xA0-\xFF])/', function($m){ // remplacement des caractères du second bloc par leurs équivalents $mapA0FF = ' !cL*Y|$_ca<--R_o+23\'mp.,10>423?AAAAAAACEEEEIIIIDNOOOOOx0UUUUYPBaaaaaaaceeeeiiiidnooooo:0uuuuypy'; return \substr($mapA0FF, \ord($m[0]) - 160, 1); }, // conversion du texte d'origine supposé en UTF-8 en latin \mb_convert_encoding($text, 'iso-8859-15', 'UTF-8') ); } /** * Retourne une chaine canonisée à partir d'une chaine donnée. * * @param string $text Texte en UTF-8 à slugifier * @param string $re_ok Ensemble des caractères autorisés (pour regexp) * @param string $subst Caractère de substitution pour les caractères non autorisés * @return string Slug en minuscules et underscores pour les espaces */public static function slugify(string $text, string $subst = '-', string $re_ok = 'a-z0-9_\-\.'): string { // remplacement des caractères du second bloc ASCII par leurs équivalents en ISO latin $slug = self::asciify($text); // substitution des espaces en underscores et des autres caractères en tirets $slug = \preg_replace('/[^'.$re_ok.']/', '-', \strtolower(\strtr($slug, ' ', '_'))); // retrait des caractères de séparation/substitution consécutifs et terminaux return \trim(\preg_replace('/([_\-\.])[_\-\.]+/', '$1', $slug), '_-.'); } /** * Retourne une chaine avec les échappements pour du code JavaScript. * cf. Twig\Extension\EscaperExtension : twig_escape_filter() * * @param string $text Valeur à échapper pour utilisation dans du code JS * @return string Valeur échappée prête pour insertion dans du code JS */public static function jsescape(string $text): string { return \preg_replace_callback('#[^a-zA-Z0-9,\._]#Su', function ($matches) { $char = $matches[0]; // A few characters have short escape sequences in JSON and JavaScript. // Escape sequences supported only by JavaScript, not JSON, are omitted. // \" is also supported but omitted, because the resulting string is not HTML safe. $shortMap = [ "\\" => "\\\\", '/' => '\\/', "\x08" => '\b', "\x0C" => '\f', "\x0A" => '\n', "\x0D" => '\r', "\x09" => '\t', ]; if (isset($shortMap[$char])) return $shortMap[$char]; $codepoint = \mb_ord($char); if (0x10000 > $codepoint) return \sprintf('\u%04X', $codepoint); // Split characters outside the BMP into surrogate pairs // https://tools.ietf.org/html/rfc2781.html#section-2.1 $u = $codepoint - 0x10000; return \sprintf('\u%04X\u%04X', 0xD800 | ($u >> 10), 0xDC00 | ($u & 0x3FF)); }, $text); } /** * Génération d'une chaine aléatoire. * * @param integer $length Nombre de caractères à générer (longueur de la chaine) * @param mixed $sigils Alphabet à utiliser (caractères autorisés dans la chaine) * si Null : ensemble alpha-numérique [a-zA-Z0-9] * si True : ASCII de base imprimable, sauf & < > $ ^ " ' ` \ | * si False : alpha-numérique non ambigus [A-Z0-9], sauf 0 O 1 I * @return string Chaine constituée de $length caractères aléatoires parmis $sigils */public static function genrandom(int $length = 8, mixed $sigils = null): string { if (null === $sigils) $sigils = 'abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ0123456789'; elseif (true === $sigils) $sigils = 'abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ0123456789_-+/*=.,;:!?@#%~(){}[]'; elseif (false === $sigils) $sigils = 'ABCDEFGHJKLMNPQRSTUVWXYZ23456789'; \srand((double)\microtime()*1000000); $str = ''; while ($length-- > 0) $str.= $sigils[ \rand() % \strlen($sigils) ]; return $str; } } |