UTF-8 персонажей от MariaDB, Drupal, php

0

Итак, у меня есть MARIADB Clustered DB, где моя кодировка установлена в: utf8_general_ci

У меня также есть функция PHP внутри модуля Drupal, которая DB_Selects строки и в конце возвращает их как "JSON".

И проблема в том, что он возвращает символы UTF-8 с кодировкой, но они должны быть декодированы.

пример: Ü возвращается как:\u00dc

Функция PHP, что у меня есть

function jgid_response($field, $id) {
  drupal_add_http_header("Expires", -1);
  drupal_page_is_cacheable(FALSE);

  $res = db_select('TABLE1', 'ur')
    ->fields('ur', array('Cust_id', 'User_id'));

  $res->addExpression('IF(begin > 0, DATE_FORMAT(FROM_UNIXTIME(begin), \'%d.%m.%Y\'), 0)', 'begin');
  $res->addExpression('IF(end > 0, DATE_FORMAT(FROM_UNIXTIME(end), \'%d.%m.%Y\'), 0)', 'end');
  $res->join('TABLE2', 'PERSON', 'person.id = ur.Cust_id');
  $res->join('TABLE2', 'COMPANY', 'company.id = ur.User_id');

  $res->fields('person', array('firstName', 'lastName'));
  $res->fields('company', array('name'));

  $res->condition($field, $id)
      ->condition('ur.notActive', 0);

  $string = (string) $res;

  $res = $res->execute();

  if ($res->rowCount() > 0) {
    $data = array();

    while ($result = $res->fetchObject()) {

      $result->application = 'APPLICATION_NAME';

      $data[] = $result;
    }

    return array(
      'result' => 'OK',
      'list' => $data,
    );
  }
}

Есть ли способ заставить этот массив закодированных символов? я пробовал: JSON_PRETTY_PRINT, JSON_UNESCAPED_SLASHES, а также JSON_UNESCAPED_UNICODE

Также попытался добавить:

drupal_add_http_header("X-JSON-RESPONSE", 1);

drupal_add_http_header('Content-Type', 'text/csv; utf-8');

где я не прав?

  • 0
    \u00dc - это совершенно приемлемый JSON-способ кодирования символа Ü… !?
  • 1
    Да, но другое приложение, которое получает, что JSON хочет - не \ u00dc :)
Показать ещё 2 комментария
Теги:
drupal
unicode

1 ответ

0
Лучший ответ

JSON с экранированными символами Юникода действителен. Вы не показали нам, где ваша php-программа сериализует JSON. Встроенный метод php json_encode() генерирует его таким образом.

JSON.parse() в вашем браузере должен вернуть вам данные с правильным представлением в юникоде.

Обратите внимание, что вы не можете повлиять на способ кодирования JSON с помощью Content-Type или других заголовков. Почему бы и нет? Сам JSON диктует свой внутренний формат.

Из-за своей истории до появления Unicode, php обычно использует /u стиль кодирования, где это возможно.

  • 0
    Я должен немного поискать, я новичок в Drupal, и этот модуль сделан кем-то другим. Это «Пользовательский модуль», и я должен «научить» себя, как они работают. Легко на Joomla / WP, Drupal кажется немного сложнее :).

Ещё вопросы

Сообщество Overcoder
Наверх
Меню