来自mariadb、drupal、php的utf-8字符

zy1mlcev  于 2021-06-17  发布在  Mysql
关注(0)|答案(1)|浏览(385)

所以我把mariadb的字符集设置为:utf8\u general\u ci
我在drupal模块中也有php函数,db\u选择行并最终将它们返回为“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\u pretty\u print、json\u unescaped\u slashes和json\u unescaped\u unicode
还尝试添加:

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

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

我错在哪里?

wfveoks0

wfveoks01#

带转义unicode字符的json有效。你没有告诉我们你的php程序在哪里序列化json。内置的php json_encode()方法就是这样生成的。 JSON.parse() 在您的浏览器中,应该返回具有正确unicode表示形式的数据。
注意,您不能通过使用content-type或其他头来影响json的编码方式。为什么不?json本身决定了它的内部格式。
由于在unicode出现之前的历史,php通常使用 /u 尽可能使用样式编码。

相关问题