Неправильный символ кодирует обратные данные mysql

Поэтому я пытаюсь сохранить турецкие символы в своей базе данных, которая обычно работает с 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" />

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

Вам необходимо установить кодировку UTF8 во всем приложении. Не смешивайте наборы символов, это только вызовет у вас головную боль. Ранее я писал ответ о кодировании, своего рода контрольный список об этом. Также есть гораздо более подробный UTF8 на всем протяжении

Qirel 15.03.2019 12:39

Хорошо, спасибо, я следовал контрольному списку. Есть идеи, можно ли извлечь текущие сохраненные данные в читаемые данные турецких символов? Например, преобразовать İstanbul в читаемые данные: Istanbul ?

TTS 15.03.2019 12:48

Если кодировка, с которой он хранится, уже искажена, это будет сложно. Вероятно, проще просто сбросить данные, если вы можете. Есть способы сделать это, если вы знаете исходную кодировку и что данные не искажены без возможности восстановления.

Qirel 15.03.2019 12:48

Множество советов в Интернете по исправлению искаженных строк, хранящихся в MySQL, например stackoverflow.com/q/29710565/318758.

Joni 15.03.2019 13:18

Итак, я попробовал эти советы, но ни один из них не работает. Я добавил img базы данных с нечитаемыми символами.

TTS 15.03.2019 14:18

Вы уже пытались «исправить» данные? Ваши симптомы не относятся к обычным вещам, таким как Моджибаке, а скорее к беспорядку из 2, может быть, 3 вещей, которые идут не так.

Rick James 16.03.2019 05:09
Стоит ли изучать PHP в 2026-2027 годах?
Стоит ли изучать PHP в 2026-2027 годах?
Привет всем, сегодня я хочу высказать свои соображения по поводу вопроса, который я уже много раз получал в своем сообществе: "Стоит ли изучать PHP в...
Symfony Station Communiqué - 7 июля 2023 г
Symfony Station Communiqué - 7 июля 2023 г
Это коммюнике первоначально появилось на Symfony Station .
Оживление вашего приложения Laravel: Понимание режима обслуживания
Оживление вашего приложения Laravel: Понимание режима обслуживания
Здравствуйте, разработчики! В сегодняшней статье мы рассмотрим важный аспект управления приложениями, который часто упускается из виду в суете...
Установка и настройка Nginx и PHP на Ubuntu-сервере
Установка и настройка Nginx и PHP на Ubuntu-сервере
В этот раз я сделаю руководство по установке и настройке nginx и php на Ubuntu OS.
Коллекции в Laravel более простым способом
Коллекции в Laravel более простым способом
Привет, читатели, сегодня мы узнаем о коллекциях. В Laravel коллекции - это способ манипулировать массивами и играть с массивами данных. Благодаря...
Как установить PHP на Mac
Как установить PHP на Mac
PHP - это популярный язык программирования, который используется для разработки веб-приложений. Если вы используете Mac и хотите разрабатывать...
1
6
166
1

Ответы 1

Предполагая, что вы начинаете с заглавной буквы 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, а другая думает, что, скажем, latin1.

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

CONVERT(BINARY(CONVERT( CONVERT(BINARY(CONVERT('İ' USING latin1)) USING utf8mb4) USING latin1)) USING utf8mb4)

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

Другие вопросы по теме