Geizkragen/lib/strings.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);
}