sql >> Databasteknik >  >> RDS >> Mysql

Tar bort unicode-punkttecken

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.



  1. Hur räknar man ord i MySQL / regular expression replacer?

  2. Hur man skriver data på ett nytt EXCEL-ark

  3. Flera planer för en identisk fråga

  4. Hur listar man tillgängliga instanser av SQL-servrar som använder SMO i C#?