Fatal error dans utf8_noplanes()

[Amélioration] Renforcement de la sécurité de utf8_noplanes()

Description

La fonction utf8_noplanes() dans ecrire/inc/charsets.php pourrait être renforcée pour mieux gérer les cas d'erreur et les encodages invalides.

AH01071: Got error 'PHP message: PHP Fatal error:  Uncaught TypeError: utf8_noplanes(): Return value must be of type string, null returned in /opt/nursit/sys/home/nursit/matrice/public/4.4/03/spip/ecrire/inc/charsets.php:1137
Stack trace:

Proposition

Ajouter :

  1. Validation du type d'entrée avec is_string()
  2. Vérification de l'encodage UTF-8 avec mb_check_encoding()
  3. Conversion automatique des encodages non-UTF8
function utf8_noplanes($x): string
{
    // Gestion des cas null et types invalides
    if ($x === null || !is_string($x)) {
        return '';
    }

    // Vérification de l'encodage UTF-8 valide
    if (!mb_check_encoding($x, 'UTF-8')) {
        $x = mb_convert_encoding($x, 'UTF-8', mb_detect_encoding($x, 'UTF-8, ISO-8859-1, ISO-8859-15', true));
    }

    
    $regexp_utf8_4bytes = '/(
       \xF0[\x90-\xBF][\x80-\xBF]{2}     # planes 1-3
    | [\xF1-\xF3][\x80-\xBF]{3}          # planes 4-15
    |  \xF4[\x80-\x8F][\x80-\xBF]{2}     # plane 16
   )/xS';

    if (preg_match_all($regexp_utf8_4bytes, $x, $z, PREG_PATTERN_ORDER)) {
        foreach ($z[0] as $k) {
            $ku = utf_8_to_unicode($k);
            $x = str_replace($k, $ku, $x);
        }
    }

    return $x;
}
Modification effectuée par Boureima Abdoulkadri