Возникли проблемы с кодировкой символов на сайте - PullRequest
1 голос
/ 13 ноября 2009

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

Когда я выполняю SELECT из моей базы данных PostgreSQL через интерфейс командной строки psql, я вижу некоторые символы, такие как следующие, что заставляет меня поверить, что они сохраняются правильно:

  • ...
  • A

Однако на моем веб-сайте вышеупомянутые символы выглядят следующим образом:

  • A
  • â|
  • Ã ¥

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

<meta http-equiv="Content-Type" content="text/html; charset=utf-8" />

до:

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

Я просто хочу получить представление о любых настройках / функциях PHP, настройках PostgreSQL, кодировках HTML или обо всем, что я должен изучить, чтобы убедиться, что все отображается правильно для моих пользователей.

Ответы [ 3 ]

3 голосов
/ 13 ноября 2009
* �
* �
* å

Этот шаблон показывает, что они сначала конвертируются из UTF-8 в ISO-8859-1, а затем снова из ISO-8859-1 в UTF-8.

Прежде всего, ваш заголовок типа контента в порядке. Держи это UTF-8.

Что-то в кодовой логике между запросом данных из БД и отправкой вывода в ответ неправильно с использованием ISO-8859-1. Это включает в себя шаги, как запрос данных из БД. Я бы начал с первого шага первым. Попробуйте, если pg_set_client_encoding поможет:

pg_set_client_encoding($connection, 'UTF8');

Другие шаги описаны здесь . Надеюсь, это поможет.

1 голос
/ 13 ноября 2009

Возможно, вам нужно установить кодировку вашего клиента в Postgres. http://developer.postgresql.org/pgdocs/postgres/multibyte.html

Кроме того, вам может потребоваться сделать это в заголовке HTTP (а не только в метатеге). Если вы используете PHP, вы бы позвонили:

header("Content-Type: text/html; charset=UTF-8");

Обязательно используйте ту же кодировку клиента при чтении и записи в БД.

0 голосов
/ 13 ноября 2009

Я предполагаю, что проблема в браузере или веб-сервере - это последовательности UTF-8, которые неправильно читаются как Latin-1. Если веб-сервер отправляет заголовок HTTP, помеченный как Latin-1, что делают многие, это переопределяет все, что есть в документе. Веб-сервер должен либо не объявлять набор символов (в этом случае к документу обращаются), либо объявлять правильный (который является UTF-8). Если это нецелесообразно, обходной путь должен использовать & # ссылки для символов вне базового диапазона ASCII 0-127 при представлении их в виде HTML.

...