Så mange ting kan gå galt her, fordi database, formularindsendelser og kildekodestrenge er alle involveret. Jeg går ud fra, at du vil bruge UTF-8, for med enhver anden typisk kodning (CP1252, Latin1) bliver du slem, når du vil bruge json_
eller accepter mere end ~200 forskellige tegn.
Den første ting at gøre er at fjerne enhver form for konvertering osv. kode, der blev skrevet med den hensigt at prøve at løse kodningsproblemer. Såsom utf8_encode
, htmlentitites
, *_replace
.. uanset hvad.
Kildekodning.
$str = "· Close up the server";
Når du skriver ovenstående, skal PHP-kildefilen være fysisk kodet i UTF-8. Hvis du er på Windows, skal du udtrykkeligt gøre eller konfigurere dette. UTF-8 sker ikke magisk på Windows.
Formular indsendes
Når brugeren indsender en formular, vil nyttelasten være i den kodning, du har erklæret siden for at være. Du kan erklære det sådan:
header("Content-Type: text/html; charset=utf-8");
Men alle kan faktisk sende vilkårlige bytes til din server, så du bør validere, at inputtet er i UTF-8, før du fortsætter. mb_check_encoding
er godt.
Database
Da dine data på dette tidspunkt kommer ind som UTF-8, er dine inputstrenge i UTF-8. Du skal angive dette, efter at du har oprettet forbindelse til databasen, ved at angive en forbindelseskodning.
mysql_set_charset("utf8"); //After making the connection, and before any queries
//or $mysqli->set_charset( "utf8");
Dette får databasen til at læse dit input i UTF-8 og kode dets output i UTF-8. Du vil også gerne indstille dine kolonner/tabeller/databaser til UTF-8.
Unicode-escape-sekvenser \uxxxx
eller \uhhhh\ullll
eller \Uxxxxxxxx
er ikke understøttet i PHP.