2009-05-15 6 views
0

Мы разработали приложение PHP-MySQL на двух языках - английском и гуджарати. Язык Gujarati содержит символы, которые нуждаются в кодировке Unicode UTF-8 для правильного отображения.Проблема с отображением международных шрифтов с UTF-8

Приложение отлично работает на моем локальном хосте на базе Windows и на моем сервере тестирования на базе Linux в Интернете.

Но когда я передаю приложение на веб-сервер клиента (на основе linux redhat), символы Gujarati отображаются неправильно.

Я проверил необработанные данные как из баз данных (на моем веб-сервере, так и на веб-сервере клиента) - это точно так же. Однако дисплей отличается. На моем сервере шрифты отображаются отлично, но когда я пытаюсь получить доступ к копии приложения для клиента, отображение шрифта Guajarati ошибочно.

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

Помогите пожалуйста.

Благодаря

Твёрдосплавный

UPDATE

Спасибо. Мы попробовали варианты настроек apache и php, заданные членами сообщества SO. Но проблема остается.

Чтобы решить проблему, мы рассмотрели различные этапы прохождения данных.

Две базы данных (на конце клиента и на нашем конце) идентичны. В них нет никакой разницы.

Следующим шагом в этом приложении является выполнение запроса, который восстанавливает данные, создает xml-файл и сохраняет его.

Этот XML-файл затем отображается на странице PHP.

Мы обнаружили, что проблема в том, что в создаваемом XML-файле существует разница. Код, используемый для создания файла XML, приведен ниже:

function fnCreateTestXML($testid) 
{ 
    $objQuery = new clsQuery(); 
    $objTest = new clsTest(); 
    $setnames = $objQuery->fnSelectRecords("tbl_testsets", "setnumber", ""); 
    $queryresultstests = $objQuery->fnSelectRecords("tbl_tests", "", ""); 
    if($queryresultstests) 
    { 

     foreach($queryresultstests as $queryresulttest) 
     { 
      foreach($setnames as $setname) 
      { 
       //Creating Root node test and set its attribute 
       $doc = new DomDocument('1.0','utf-8'); 
       $root = $doc->createElement('test'); 
       $root = $doc->appendChild($root); 
       //and so on 

//Saving XML on the disk 
       $xml_create = $doc->saveXML(); 
       $testname = "testsxml.xml"; 
       $xml_string = $doc->save($testname); 

Любые идеи?

Благодаря

Винаяк

+0

http://stackoverflow.com/questions/346531/utf8-problem-with-mysql-5/346552#346552 – markus

ответ

0

Убедитесь, что заголовки ответа правильны - Контент-тип должен иметь кодировку UTF-8 в нем.

0

Проверьте набор символов настройки на экземпляре БД на компьютере клиента:

SHOW VARIABLES LIKE 'character_set%'; 
SHOW VARIABLES LIKE 'collation%'; 

Перед выполнением каких-либо текстовых Fetching запросов, попробуйте запустить:

SET NAMES utf8 
SET CHARACTER SET utf8 

Если это работает, вы можете добавьте следующее в мое.CNF на машине клиента:

[mysqld] 
collation_server=utf8_unicode_ci 
character_set_server=utf8 
default-character-set=utf8 
default-collation=utf8_general_ci 
collation-server=utf8_general_ci 
2

Поскольку вы заявили, что он работает в вашей среде разработки, а не на ваших клиентов, вы можете проверить клиентов в Apache AddDefaultCharset и установить это в UTF-8, если это еще не так. (Если предположить, что они используют Apache.)

Я, как правило, чтобы убедиться, что следующие шаги проверяются

  1. PHP заголовок отправляется в UTF-8
  2. Мета-тег установлен в UTF-8 (Content-Type)
  3. хранение устанавливается в UTF8
  4. выходе
  5. сервера установлен в UTF8
  6. Убедитесь, что ваши файлы PHP код закодированы в UTF8 с BOM (Byte Order Mark)
+0

и 5. Убедитесь, что ваши файлы php-кода закодированы в UTF8 с помощью спецификации (отметки байтового байта), поэтому что специальные символы в html или php выглядят как ожидалось –

+0

@dcaunt - Совершенно верно. Это тоже. (Ред.) –

2

Ответ почти наверняка заключается в отправке заголовков с веб-страниц. Чтобы диагностировать такие проблемы, я нашел полезным установить Firefox-аддон "Live HTTP Headers".

Установите этот аддон, затем включите его и перезагрузите страницу с веб-сервера клиента и с вашего собственного.

То, что вы, вероятно, увидите, что страница служит ваш веб-сервер имеет заголовок:

Content-Type: text/html; charset=UTF-8 

В то время, когда служил клиентским веб-сервером он говорит:

Content-Type: text/html 

Путь я бы рекомендуется установить это, чтобы убедиться, что вы явно задали заголовок для указания utf-8 на каждой странице вашего приложения. Затем это изолирует ваше приложение от будущих изменений конфигурации на стороне клиента.

Чтобы сделать это, вызовите

header('Content-type: text/html; charset=utf-8'); 

на каждой странице перед отправкой каких-либо данных.

0

Пожалуйста, используйте этот мета-тег: META HTTP-эквив = "Content-Type" содержание = "текст/html; Charset = UTF-8"

Убедитесь, что использование этого кода в PHP: mysql_query ("установить character_set_results = 'utf8' ");