JSON, MySQL, PHP - проблема кодирования - PullRequest
0 голосов
/ 29 октября 2010

Я пытался реализовать вызов AJAX для базы данных, возвращающей файл JSON с PHP, и в итоге столкнулся с проблемой кодирования.

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

Я изменил все настройки набора символов (база данных, html, сценарии) на UTF-8, но это все еще не ход.Это функция, которую я использую для извлечения данных:

function getJSON($sql){

 $rows = array();
  while($r = mysql_fetch_assoc($sql)) {
    $rows[] = $r;
 }

 print json_encode($rows);

}

И это моя структура таблицы БД:

conta int(10),
senha char(40),
nome varchar(30),
sobrenome varchar(25),
mail varchar(30),
saldo decimal(65,2),
agencia varchar(30),
tipo int(1),
ativa int(1),
padrao int(1) 

Строки "nome" и "sobrenome" - это те, которые могутсодержат европейские символы (~, ç, ´, `и т. д.).

Я пытался найти функцию для преобразования всего массива результатов в utf8, но не смог ее найти.

IИнтересно, сможете ли вы пролить свет на эту проблему?

Спасибо.

Ответы [ 4 ]

1 голос
/ 25 сентября 2012

Поместите это в самый верх файла:

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

Затем измените это в своем коде:

function getJSON($sql){

     $rows = array();
     while($r = mysql_fetch_assoc($sql)) {
        $rows[] = $r;
     }

 print utf8_encode(json_encode($rows));

 }

Также удалите тег META для кодировки

0 голосов
/ 29 октября 2010

Попробуйте использовать функцию MySQL Convert в вашем операторе выбора.

0 голосов
/ 29 октября 2010

Вам нужно установить кодировку во многих местах.

Попробуйте следующее:

Отправьте http-заголовок с этой строкой в ​​вашем php-скрипте:

header("Content-Type: text/javascript; charset=utf-8");

Вам нужно поместить это перед печатью ответа json.

Если это не сработает, убедитесь, что charset для подключения к mysql установлен в utf-8 (Mysql имеет отдельную кодировку для базы данных и для подключений к ней и будет преобразовывать на лету, если не матч)

0 голосов
/ 29 октября 2010

Прошло некоторое время, но если вы изменили базу данных и / или таблицу с латиницы на utf8, возможно, в столбцах таблицы все еще используется латинская сортировка. Попробуйте SHOW FULL COLUMNS IN my_database.table; как консольный запрос mysql и убедитесь, что 3-й столбец (поле сопоставления) - utf8.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...