Толкова много неща могат да се объркат тук, тъй като базата данни, изпращането на формуляри и низовите литерали на изходния код са замесени. Предполагам, че искате да използвате UTF-8, защото с всяко друго типично кодиране (CP1252, Latin1) ще бъдете прецакани, когато искате да използвате json_
или приемете повече от ~200 различни знака.
Първото нещо, което трябва да направите, е премахване всякакъв вид код за преобразуване и т.н., който е написан с намерението да се опита да коригира проблеми с кодирането. Като например utf8_encode
, htmlentitites
, *_replace
.. както и да е.
Кодиране на източника.
$str = "· Close up the server";
Когато пишете по-горе, изходният файл на PHP трябва да бъде физически кодиран в UTF-8. Ако използвате Windows, трябва изрично да направите или конфигурирате това. UTF-8 не се случва магически в Windows.
Изпращане на формуляр
Когато потребителят подаде формуляр, полезният товар ще бъде в кодирането, което сте декларирали за страницата. Можете да го декларирате така:
header("Content-Type: text/html; charset=utf-8");
Но всеки може действително да изпрати произволни байтове на вашия сървър, така че трябва да потвърдите, че входът е в UTF-8, преди да продължите. mb_check_encoding
е добре.
База данни
Тъй като в този момент вашите данни идват като UTF-8, вашите входни низове са в UTF-8. Трябва да посочите това, след като се свържете с базата данни, като посочите кодиране на връзката.
mysql_set_charset("utf8"); //After making the connection, and before any queries
//or $mysqli->set_charset( "utf8");
Това кара базата данни да чете вашия вход в UTF-8 и да кодира изхода си в UTF-8. Също така бихте искали да настроите своите колони/таблици/бази данни на UTF-8.
Unicode escape последователности \uxxxx
или \uhhhh\ullll
или \Uxxxxxxxx
не се поддържат в PHP.