Il problema è il supporto penoso di PHP con le stringhe multibyte. È stato in parte risolto con l'introduzione della libreria mbstring.

A differenza dei caratteri "normali", PHP memorizza i caratteri multibyte (ad es. lettere accentate) con due byte, per questo motivo dovresti sempre utilizzare la controparte mb_* delle funzioni per gestire stringhe.

Dai un'occhiata a questa guida, nell'esempio della funzione strlen() https://guidaphp.it/base/funzioni/stringhe

A livello di database devi fare la stessa cosa, ossia cambiare la codifica in utf8mb4 (dimenticati di latin_swedish) che ormai è diventato lo standard per gestire caratteri Unicode.

Ricordati che la connessione al DB deve avvenire anch'essa in utf8, altrimenti i dati contenenti caratteri speciali non verranno salvati/prelevati correttamente.

E anche nell'HTML dovrai utilizzare il metatag charset

codice HTML:
<meta charset="utf-8">

Riassumento devi gestire la codifica dei caratteri ad ogni livello:


  • PHP
  • Database
  • HTML