Intereting Posts

Проблема кодировки кодировки

Я занимаюсь разработкой арабского веб-сайта. Однако я использую AJAX для сохранения некоторого текста в моей базе данных. AJAX отлично работает со мной. Моя проблема заключается в том, что когда я сохраняю данные в своей базе данных и пытаюсь распечатать их на своем экране, он возвращает странный текст. Я использовал функцию PHP mb_detect_encoding, чтобы определить, как база данных имеет дело с текстом. Функция вернула UTF-8. Поэтому я использовал iconv («windows-1256», «UTF-8», $ row ["text"]) для печати текста на экране, но он все еще возвращает эту странную вещь. Пожалуйста, дайте руку Спасибо

пожалуйста, взгляните на эту тему (и сначала используйте поиск, прежде чем публиковать вопрос).

в вашем случае, я думаю, вы забыли установить chorrect charset для подключения к базе данных (используя оператор SET NAMES или mysql_set_charset () ), но это трудно сказать.

это цитата из chazomaticus , которая дала прекрасный ответ в понравившемся потоке, перечисляя все моменты, о которых вы должны заботиться:

Место хранения:

  • Укажите utf8_unicode_ci (или эквивалентную) сортировку для всех таблиц и текстовых столбцов в вашей базе данных. Это делает MySQL физически хранить и извлекать значения изначально в UTF-8.

индексирование:

  • В PHP, в какой-либо используемой DB-оболочке, вам нужно установить charset для соединения с utf8. Таким образом, MySQL не делает преобразование из своего родного UTF-8, когда он передает данные на PHP. * Обратите внимание: если вы не используете оболочку DB, вам, вероятно, придется выдать запрос, чтобы сообщить MySQL, чтобы он дал вам результаты в UTF-8: SET NAMES 'utf8' (как только вы подключитесь).

Доставка:

  • Вы должны сказать PHP, чтобы доставить соответствующие заголовки клиенту, поэтому текст будет интерпретироваться как UTF-8. В PHP вы можете использовать опцию default_charset php.ini или вручную самостоятельно выпускать заголовок Content-Type , что является просто большей работой, но имеет тот же эффект.

Подача конкурсных предложений:

  • Вы хотите, чтобы все данные, отправленные вам браузерами, были в UTF-8. К сожалению, единственный способ надежно сделать это – добавить атрибут accept-charset ко всем тэгам <form> : <form ... accept-charset="UTF-8"> .
  • Обратите внимание, что спецификация HTML W3C гласит, что клиенты «должны» по умолчанию отправлять формы обратно на сервер в любой кодировке, обслуживаемой сервером, но это, по-видимому, только рекомендация, следовательно, необходимость быть явным для каждого <form> .
  • Хотя на этом фронте вы все равно хотите проверить каждую поданную строку как действительную UTF-8, прежде чем пытаться ее сохранить или использовать в любом месте. PHP mb_check_encoding() делает трюк, но вы должны использовать его религиозно.

Обработка:

  • Это, к сожалению, тяжелая часть. Вы должны убедиться, что каждый раз, когда вы обрабатываете строку UTF-8, вы делаете это безопасно. Самый простой способ сделать это – широко использовать mbstring PHP mbstring .
  • Строковые операции PHP НЕ по умолчанию безопасны для UTF-8. Есть некоторые вещи, которые можно смело выполнять с обычными строковыми операциями PHP (например, конкатенация), но для большинства вещей вы должны использовать эквивалентную функцию mbstring .
  • Чтобы узнать, что вы делаете (читайте: не испортите его), вам действительно нужно знать UTF-8 и как он работает на самом низком возможном уровне. Проверьте какие-либо ссылки с utf8.com на наличие хороших ресурсов, чтобы узнать все, что вам нужно знать.
  • Кроме того, мне кажется, что это должно быть сказано где-то, хотя это может показаться очевидным: каждый PHP или HTML-файл, который вы будете обслуживать, должен быть закодирован в действительном UTF-8.

обратите внимание, что вам не нужно использовать utf-8 – важная часть состоит в том, чтобы использовать ту же кодировку везде , независимо от того, какая кодировка может быть. но если вам все равно нужно что-то менять, используйте utf-8.

Я рекомендую изменить ваши веб-страницы на UTF-8.

В идеале, вы должны использовать ту же кодировку (UTF-8?) На своих веб-страницах, базе данных и JavaScript / AJAX . Многие люди забывают устанавливать кодировку для запросов / ответов AJAX, что дает вам искаженные данные в некоторых браузерах ( кашель ).

Спасибо, ребята, за вашу поддержку, и извините oezi за эту путаницу. Я действительно сделал обыск и не нашел ответа. Тем не менее, теперь он отлично работает со мной. Я собираюсь объяснить, что я сделал, чтобы заставить его работать, чтобы кто-нибудь мог извлечь из этого выгоду: – Я сделал свои таблицы charset в utf8_unicode_ci. – Чтобы отправить данные, я использовал AJAX с кодировкой по умолчанию UTF-8. – Когда я получаю данные из своей БД, я использовал функцию iconv как следующий символ («UTF-8», «windows-1256», $ row [«text»]), и он работает. Я надеюсь, что ясное