42 lines
940 B
PHP
42 lines
940 B
PHP
<?php
|
|
// lib/strings.php
|
|
// Kleine String-Helper ohne harte Abhängigkeit von mbstring.
|
|
// Ziel: Längenvalidierung möglichst „zeichenbasiert“ und UTF-8-tauglich.
|
|
|
|
/**
|
|
* Liefert die Länge eines Strings in Zeichen (nicht Bytes), wenn möglich.
|
|
*
|
|
* Priorität:
|
|
* 1) mb_strlen (mbstring)
|
|
* 2) grapheme_strlen (intl)
|
|
* 3) UTF-8 Codepoint-Zählung via PCRE
|
|
* 4) Fallback: strlen (Bytes)
|
|
*/
|
|
function str_length(string $s): int
|
|
{
|
|
if (function_exists('mb_strlen'))
|
|
{
|
|
return (int)mb_strlen($s, 'UTF-8');
|
|
}
|
|
|
|
if (function_exists('grapheme_strlen'))
|
|
{
|
|
$len = grapheme_strlen($s);
|
|
if ($len !== false)
|
|
{
|
|
return (int)$len;
|
|
}
|
|
}
|
|
|
|
// UTF-8 Codepoints zählen (best-effort ohne Extensions)
|
|
$m = [];
|
|
$ok = @preg_match_all('/./us', $s, $m);
|
|
if ($ok !== false)
|
|
{
|
|
return (int)$ok;
|
|
}
|
|
|
|
// Letzter Fallback (Bytes)
|
|
return strlen($s);
|
|
}
|