2013-07-05 3 views
1

У меня есть три среды баз данных, MAMP, сервер тестирования, фактический сервер. Сервер тестирования - это просто старый сайт, который не использует свою базу данных.Проблемы с отображением ударных символов, работает с другой базой данных

Как на MAMP, так и на тестовом сервере акцентированные буквы, которые мне нужно отображать, показывают прекрасный (например, шрифт не проблема) í á ñ, однако на самом сервере я получаю эти прекрасные черные квадраты вопросительных знаков .

Так что я догадался, что это была кодировка, и посмотрел на нее, но у всех БД есть тот же набор символов latin1_swedish_ci.

Я проверил параметры, используя метод, описанный in this post, а затем запустил SET NAMES 'utf-8'; в SQL, но проблема не устранена.

Я также изменил кодировку в базе данных и на всех отдельных таблицах, но это, похоже, не имеет никакого эффекта.

Единственный способ повлиять на то, как браузер интерпретирует текст, он должен изменить META на latin1, на самом деле я использую ini_set('default_charset', 'utf-8');. Проблема здесь в том, что она заменяет на всевозможные случайные символы.

Может кто-нибудь, пожалуйста, помогите мне определить причину? У меня нет идей.

Я использую SublimeText2, может это проблема? Я попытался сохранить его с кодировкой UTF, и это тоже не сильно повлияло.

ответ

2

Если вы видите UNICODE символ замены, что означает, что данные интерпретируется как UTF-8 (или другую кодировку Unicode), но не на самом деле действует в UTF-8. Переопределение ваш браузер, чтобы интерпретировать данные в какой-либо другой кодировке (меню Вид → Кодировка в большинстве браузеров), чтобы выяснить, какие данные фактически закодированы в После того, как вы поняли, что из либо:.

  1. Изменить кодировку данных для соответствия заявленной кодировке; сделайте это, установив кодировку подключения к базе данных (mysql_set_charset, SET NAMES ... или аналогичную, в зависимости от вашего API). Сопоставление и кодирование отдельных столбцов не имеет значения, поскольку MySQL конвертирует кодировки «на лету» в кодировку соединения.
  2. Измените объявленную кодировку, установив правильный HTTP-заголовок Content-Type и/или <meta>; ini_set('default_charset', ...) сделает это, но веб-сервер может переопределить его. Проверьте фактические заголовки HTTP с помощью инструментов браузера.

Сначала убедитесь, что данные в вашей базе данных на самом деле в порядке и не являются мусором. Если вам нужна дополнительная информация, см. What Every Programmer Absolutely, Positively Needs To Know About Encodings And Character Sets To Work With Text и Handling Unicode Front To Back In A Web App.

+0

Спасибо за ответ. Я собираюсь принять его, хотя я исправил проблему в конце пятницы, потому что ее интересное чтение. Я исправил его, перекодировав файлы как Window 1252 и установив charset на latin1. Изменение его на latin1 осуществляло только текст на странице, поэтому я изменил формат страницы. еще раз спасибо –

Смежные вопросы