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

Rimozione del carattere proiettile unicode

Tante cose possono andare storte qui, perché sono coinvolti database, invii di moduli e stringhe letterali del codice sorgente. Presumo che tu voglia usare UTF-8, perché con qualsiasi altra codifica tipica (CP1252, Latin1) sarai fregato quando vorrai usare json_ o accetta più di ~200 caratteri diversi.

La prima cosa da fare è rimuovere qualsiasi tipo di codice di conversione ecc. che è stato scritto con l'intenzione di provare a risolvere i problemi di codifica. Come utf8_encode , htmlentitites , *_replace .. qualunque cosa.

Codifica della sorgente.

$str = "· Close up the server";

Quando si scrive quanto sopra, il file sorgente PHP deve essere codificato fisicamente in UTF-8. Se sei su Windows, devi farlo o configurarlo esplicitamente. UTF-8 non accade magicamente su Windows.

Modulo inviato

Quando l'utente invia un modulo, il payload sarà in qualunque codifica tu abbia dichiarato che la pagina sia. Puoi dichiararlo così:

header("Content-Type: text/html; charset=utf-8");

Ma chiunque può effettivamente inviare byte arbitrari al tuo server, quindi dovresti convalidare l'input in UTF-8 prima di procedere. mb_check_encoding va bene.

Banca dati

Poiché a questo punto i tuoi dati stanno arrivando come UTF-8, le tue stringhe di input sono in UTF-8. Devi specificarlo dopo la connessione al database, specificando una codifica di connessione.

mysql_set_charset("utf8"); //After making the connection, and before any queries
//or $mysqli->set_charset( "utf8");

Questo fa sì che il database legga l'input in UTF-8 e codifichi il suo output in UTF-8. Vorresti anche impostare le tue colonne/tabelle/database anche su UTF-8.

Sequenze di escape Unicode \uxxxx o \uhhhh\ullll o \Uxxxxxxxx non sono supportati in PHP.