Så många saker kan gå fel här, eftersom databas, formulärinlämningar och källkodssträngar är alla inblandade. Jag antar att du vill använda UTF-8, för med vilken annan typisk kodning som helst (CP1252, Latin1) kommer du att bli knäpp när du vill använda json_
eller acceptera mer än ~200 olika tecken.
Det första du ska göra är att ta bort någon form av konvertering etc kod som skrevs med avsikten att försöka fixa kodningsproblem. Såsom utf8_encode
, htmlentitites
, *_replace
.. vad som helst.
Källkodning.
$str = "· Close up the server";
När du skriver ovanstående måste PHP-källfilen vara fysiskt kodad i UTF-8. Om du använder Windows måste du uttryckligen göra eller konfigurera detta. UTF-8 händer inte magiskt på Windows.
Formulär skickas in
När användaren skickar in ett formulär kommer nyttolasten att vara i vilken kodning du än har angett att sidan ska vara. Du kan deklarera det så här:
header("Content-Type: text/html; charset=utf-8");
Men vem som helst kan faktiskt skicka godtyckliga bytes till din server, så du bör validera att inmatningen är i UTF-8 innan du fortsätter. mb_check_encoding
är bra.
Databas
Eftersom dina data vid denna tidpunkt kommer in som UTF-8, är dina inmatningssträngar i UTF-8. Du måste ange detta efter att ha anslutit till databasen, genom att ange en anslutningskodning.
mysql_set_charset("utf8"); //After making the connection, and before any queries
//or $mysqli->set_charset( "utf8");
Detta gör att databasen läser din indata i UTF-8 och kodar dess utdata i UTF-8. Du skulle också vilja ställa in dina kolumner/tabeller/databaser till UTF-8 också.
Unicode escape-sekvenser \uxxxx
eller \uhhhh\ullll
eller \Uxxxxxxxx
stöds inte i PHP.