sql >> Database teknologi >  >> RDS >> Mysql

Fjerner unicode-punkttegn

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.



  1. Skal forbindelsestabeller have mere end én primær nøgle fra en anden identifikationstabel?

  2. MySQL Update-forespørgsel med venstre deltagelse og gruppe efter

  3. Er der ingen mulighed for at kortlægge kolonnenavnet i sequelize model

  4. Oprettelse af databasevedligeholdelsesplaner