Неправильный символ кодирует MySQL обратные данные - PullRequest
0 голосов
/ 15 марта 2019

Поэтому я пытаюсь сохранить турецкие символы в моей базе данных, которая обычно работает с utf8_general_ci и UTF-8 на веб-сайте.Но поскольку этот проект из «Турции», я не могу успешно сохранить символы, введенные пользователями на своем веб-сайте, в нашу базу данных.

В настоящее время он сохраняется следующим образом:

Kà ± rÄ ‚ ± kkale
â € ™ stanbul

Код, который я использую для преобразования символов в php перед сохранением в базу данных:

iconv("ISO-8859-1", "UTF-8", $city);

В заголовке сайта я использую:

<html lang="tr-TR"> 
<meta http-equiv="Content-Type" content="text/html; charset=iso-8859-9" />

Кто-нибудь знает, как я могу правильно закодировать это для читаемых данных?И есть ли шанс изменить текущие сохраненные данные на читаемые?Database preview

1 Ответ

0 голосов
/ 16 марта 2019

Предполагая, что вы начинаете с точечной буквы I, а затем 3 раза, вы можете получить Ä°stanbul.

İ --> Ä° --> Ä° -> Ä°

В гексах (для utf8), то есть

C4B0 --> C384C2B0 --> C383E2809EC382C2B0 --> C383C692C3A2E282ACC5BEC383E2809AC382C2B0

For example, C4 B0 is the single character `İ` in utf8, but the 2 characters `Ä°` in latin1.

Моджибаке происходит, когда одна рука думает, что кодировка, скажем, utf8, в то время как другая рука думает, что она, скажем, латинская1.

Для турецкого языка вам нужно остаться с UTF-8 (который MySQL называет utf8 или utf8mb4)

CONVERT(BINARY(CONVERT( CONVERT(BINARY(CONVERT('Ä°' USING latin1)) USING utf8mb4) USING latin1)) USING utf8mb4)

превратит Ä° обратно в İ. Третья итерация должна отменить беспорядок, который у вас есть.

...