html — плохо закодированные турецкие символы в базе данных MySQL

Я работаю над турецким веб-сайтом, который хранит много искаженных турецких символов в базе данных MySQL, например:

 - ş as þ
- ı as ý
- ğ as ð
- Ý as İ

Я не могу изменить данные в базе данных, потому что база данных обновляется ежедневно, и новые данные снова будут содержать некорректные символы. Поэтому моя идея состояла в том, чтобы изменить данные в PHP вместо изменения данных в базе данных. Я попробовал несколько шагов:

Турецкие символы отображаются неправильно

Исправить турецкий код ошибки Html / PHP (iconv?)

Проблема отображения турецкого языка PHP

Проблема кодировки PHP MYSQL (турецкие символы)

Я использую PHP-MySQLi-Database-Class доступно на GitHub с utf8 в качестве кодировки.

Я даже пытался заменить искаженные символы на str_replace, например:

$newString = str_replace ( chr ( 253 ), "ı", $newString );

У меня вопрос, как я могу решить проблему, не меняя символы в базе данных? Есть ли лучшие практики? Это хороший вариант просто заменить персонажей?

РЕДАКТИРОВАТЬ:
решил это с помощью

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

3

Решение

Два решения хороши

Проблема кодировки PHP MYSQL (турецкие символы)

Проблема отображения турецкого языка PHP

Также вы можете установить конфигурацию на phpMyAdmin

Операции> Параметры таблицы> Сопоставление> выберите utf8_general_ci

если вы создаете таблицы, то уже редактируйте структуры сортировки

0

Другие решения

SELECT CONVERT(CONVERT(UNHEX('d0dddef0fdfe') USING ...) USING utf8);

latin5 / iso-8859-1 шоу ĞİŞğış
latin1 / iso-8859-9 шоу ÐÝÞðýþ

Вы путаете две одинаковые кодировки; см. первый абзац в https://en.wikipedia.org/wiki/ISO/IEC_8859-9 .

«Сортировка» предназначена только для сортировки. Но сначала вам нужно изменить CHARACTER SET на латынь5. Затем измените параметры сортировки на latin5_turkish_ci. (Поскольку это значение по умолчанию для latin5, никаких действий предпринимать не нужно.)

это может достаточно внести изменения в MySQL: РЕДАКТИРОВАТЬ 3

NO, this is probably wring -- ALTER TABLE tbl CONVERT TO CHARACTER SET latin5;

Увидев больше проблемы, этот «2-ступенчатый ALTER», вероятно, правильно:

ALTER TABLE Tbl MODIFY COLUMN col VARBINARY(...) ...;
ALTER TABLE Tbl MODIFY COLUMN col VARCHAR(...) ... CHARACTER SET latin5 ...;

Сделайте это для каждой таблицы. Не забудьте сначала проверить это на копии ваших данных.

2-х ступенчатый ALTER полезно, когда байтов верны, но CHARACTER SET не является.

CONVERT TO следует использовать, когда персонажи верны, но вы хотите другую кодировку (и CHARACTER SET). Увидеть Дело 5.

Редактировать 1

E7 а также FD и cp1250, dec8, latin1 и latin2 для ç а также ý, FD в латинице есть ı, Я пришел к выводу, что ваша кодировка latin1не latin5,

Вы говорите, что не можете изменить «сценарии». Давайте посмотрим на ваши ограничения. Вы ограничены в INSERT боковая сторона? Или SELECT боковая сторона? Или оба? Что представляет собой текст; HTML? MySQL готов перейти с latin1 на / с latin5, и вы вставляете / выбираете (основываясь на нескольких настройках). И / или вы могли бы лгать HTML (через метатег), чтобы заставить его интерпретировать байты по-разному. Пожалуйста, изложите детали потока данных.

Редактировать 2

Учитывая, что HEX в таблице E7FD6B6172FD6C6D6173FD6E61и он должен быть представлен как çıkarılmasına, … Обратите внимание, особенно вторая буква должна отображаться как ı (Турецкая без точек я), не ý (маленький Y с острым), правильно?

Начните с попытки

<meta http-equiv="Content-Type" content="text/html; charset=ISO-8859-9"/>

Это должно дать вам `latin5 рендеринг, как вы уже узнали. Ссылка IANA.

Что касается «Лучшей практики», то это будет включать изменение способа вставки текста. Вы заявили, что это запрещено.

По-видимому, у вас есть символы латинского 5, хранящиеся в столбце latin1. Поскольку латиница 1 не включает проверку, вы можете без проблем вставлять и извлекать символы латиницы 5.

Это не относится к желанию иметь турецкий сопоставление. При необходимости я, возможно, смогу придумать способ указать турецкий порядок в конкретных заявлениях; пожалуйста, предоставьте пример заявления.

0

По вопросам рекламы [email protected]