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 :
- Validation du type d'entrée avec
is_string() - Vérification de l'encodage UTF-8 avec
mb_check_encoding() - 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