Хранение данных:
utf8mb4
для всех таблиц и текстовых столбцов в вашей базе данных. Это делает MySQL физически хранить и извлекать значения, закодированные изначально в UTF-8. Обратите внимание, что MySQL будет неявно использовать кодировку utf8mb4
, если задано сопоставление utf8mb4_*
(без какого-либо явного набора символов). utf8
, который поддерживает только подмножество символов Unicode. Мне хотелось бы, чтобы я шутил. Доступ к данным:
utf8mb4
. Таким образом, MySQL не выполняет преобразование из собственного UTF-8, когда он передает данные в ваше приложение и наоборот. charset
в DSN : $dbh = new PDO('mysql:charset=utf8mb4');
Если вы используете mysqli , вы можете вызвать set_charset()
: $mysqli->set_charset('utf8mb4'); // object oriented style
mysqli_set_charset($link, 'utf8mb4'); // procedural style
Если вы застряли в простой mysql , но, возможно, работаете с PHP & ge; 5.2.3 вы можете вызвать mysql_set_charset
. SET NAMES 'utf8mb4'
. utf8mb4
/ utf8
применяется, как указано выше. Выход:
default_charset
php.ini или вручную выпустить заголовок Content-Type
MIME самостоятельно, что больше работает, но имеет тот же эффект. Вход:
mb_check_encoding()
делает трюк, но вы должны использовать его религиозно. На самом деле этого не происходит, так как вредоносные клиенты могут отправлять данные в любую кодировку, и я не нашел трюка, чтобы заставить PHP сделать это для вас надежно. accept-charset
ко всем тэгам
:
. Для HTML до HTML5 только : обратите внимание, что спецификация HTML W3C говорит, что клиенты «должны» по умолчанию отправлять формы обратно на сервер в любой кодировке, обслуживаемой сервером, но это, по-видимому, только рекомендация, следовательно, необходимо явно указывать на каждый тэг
. Другие кодовые соображения:
mbstring
. mbstring
. Это недокументированные детали реализации компилятора и могут быть изменены в любое время. (ОБНОВЛЕНИЕ: см. GeneratedNames.cs
в источниках C # для текущих данных, приведенное ниже описание несколько устарело.)
Однако, поскольку я хороший парень, вот некоторые из этих деталей:
Если у вас есть неиспользуемая локальная переменная, которую удаляет оптимизатор, мы все равно высылаем информацию об отладке для него в PDB. Мы привязали суффикс __Deleted$
к таким переменным, чтобы отладчик знал, что они были в исходном коде, но не представлены в двоичном файле.
Временные слоты переменной, выделенные компилятором, получают имена с шаблоном CS $ X $ Y, где X - «временный вид», а Y - количество выделенных временных рядов. Временные типы:
0 --> short lived temporaries
1 --> return value temporaries
2 --> temporaries generated for lock statements
3 --> temporaries generated for using statements
4 --> durable temporaries
5 --> the result of get enumerator in a foreach
6 --> the array storage in a foreach
7 --> the array index storage in a foreach.
Временные виды между 8 и 264 являются дополнительными хранилищами индексов массивов для многомерных массивов.
Временные типы выше 264 используются для временного использования фиксированного оператора, фиксирующего строку.
Специальные имена, созданные компилятором, генерируются для:
1 --> the iterator state ("state")
2 --> the value of current in an iterator ("current")
3 --> a saved parameter in an iterator
4 --> a hoisted 'this' in an iterator ("this")
5 --> a hoisted local in an iterator
6 --> the hoisted locals from an outer scope
7 --> a hoisted wrapped value ("wrap")
8 --> the closure class instance ("locals")
9 --> the cached delegate instance ("CachedAnonymousMethodDelegate")
a --> the iterator instance ("iterator")
b --> an anonymous method
c --> anonymous method closure class ("DisplayClass")
d --> iterator class
e --> fixed buffer struct ("FixedBuffer")
f --> anonymous type ("AnonymousType")
g --> initializer local ("initLocal")
h --> query expression temporary ("TransparentIdentifier")
i --> anonymous type field ("Field")
j --> anonymous type type parameter ("TPar")
k --> auto prop field ("BackingField")
l --> iterator thread id
m --> iterator finally ("Finally")
n --> fabricated method ("FabricatedMethod")
o --> dynamic container class ("SiteContainer")
p --> dynamic call site ("Site")
q --> dynamic delegate ("SiteDelegate")
r --> com ref call local ("ComRefCallLocal")
s --> lock taken local ("LockTaken")
шаблон для генерации магических имен: P<N>C__SI
где: