Inoltre imposta esplicitamente il parametro $encoding di htmlspecialchars, come anche mysqli::set_charset (discorso complesso per compatibilità di cosa sia alias UTF8 in Mysql 8 o precedente, inoltre non è importante solo la connessione del cliente php ma anche la COLLATION).
Al più se ti occorre markup HTML via php utilizza per il debug
Codice PHP:
var_dump(urlencode($var)); // Da php >= 7.2 non utilizza EBCDIC
però i tag HTML hanno comunque le loro limitazioni. Una come menzionato da @dreadnaut mentre il resto è per tag HTML.
Codice PHP:
<?php
/*
8.1.0 flags changed from ENT_COMPAT to ENT_QUOTES | ENT_SUBSTITUTE | ENT_HTML401.
*/
$string = "\xE1" ; //á ISO-8859-1
$string = urldecode(urlencode($string)); // Simulazione cliente invio dati con codifica percentuale e la conversione
$value = htmlspecialchars(
$string,
ENT_QUOTES | ENT_HTML401,
'UTF-8'); // php >= 5.4
// $double_encode https://bugs.php.net/bug.php?id=80928 ' non riconosciuto con ENT_HTML401
if($value) {
var_dump($value);
} else {
echo 'my bad user';
}
Quando chiami la variabile super globale $_POST potrebbe anche non effettuare automaticamente la conversione della codifica percentuale a seconda se è codice legacy e com'è impostato php.