2015-10-13 3 views
-3

Я использую ZF2 и базу данных mysql. Проблема заключается в кодировке latin1, но на данный момент мне не нужно это менять. Поэтому я использую много уловок, чтобы заставить мой водитель PDO, чтобы мои результаты на UTF-8:Преобразование данных UTF-8

Это один в local.php:

return array(
    'db' => array(
     'username' => $dbParams['username'], 
     'dsn'  => 'mysql:dbname='.$dbParams['database'].';host='.$dbParams['hostname'].';charset=utf-8', 
     'password' => '', 
     'charset' => 'utf-8', 
    ), 
); 

И это один в global.php

return array(
    'db' => array(
     'charset' => 'utf-8', 
     'driver' => 'Pdo', 
     'driver_options' => array(
      PDO::MYSQL_ATTR_INIT_COMMAND => "SET NAMES UTF8", 
      PDO::MYSQL_ATTR_INIT_COMMAND => "SET CHARACTER SET UTF8", 
     ), 
    ), 
    'service_manager' => array(
     'factories' => array(
      'Zend\Db\Adapter\Adapter' => 'Zend\Db\Adapter\AdapterServiceFactory', 
     ) 
    ), 
    'translator' => array(
     'locale' => 'fr_FR' 
    ), 
); 

Но когда я делаю:.

эхо "КОДИРОВАНИЕ =" mb_detect_encoding ($ myDataBaseRetrievedVar);

Это говорит мне: ASCII! И для специальных символов я не могу сделать json_encode.

+0

Является ли сама база данных utf8 закодированной? Попробуйте запустить запрос 'SHOW CREATE TABLE yourTableHere'. – Qirel

+0

Нет базы данных Latin1, как я сказал. Но я не должен прикасаться к нему на данный момент ... – Amelie

+0

База данных * charset *, database * collation * (charset - это не то же самое, что и для сортировки), и SQL-соединение должно быть одинаковой кодировкой. – Qirel

ответ

2

Во-первых, для mysql кодировка называется utf8, а не utf-8.

Во-вторых, основные символы latin1 одинаковы в utf-8. Средство «Амелия» в utf-8 является той же строкой, что и «Amelie» в latin1, а также ASCII. Имея «Amelie» в ASCII, вы также используете его в utf-8.

В-третьих, latin1 поддерживает ограниченное количество «специальных символов», и вы просто не можете ожидать от однобайтового кодирования того же количества символов, что и многобайтовые.

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

В случае, если у вас есть проблемы с json_encode(), вы должны поставить с вопросом:

  • код
  • точная ошибка выборки сообщений
  • данные

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

+0

Хорошо, так скажите мне, почему мой json_encode не работает ... и json_last_error_msg() сообщает мне, что моя ошибка - неправильные строки UTF-8 ... – Amelie

+0

Кроме того, мой вопрос не заслуживает -1 ... – Amelie

+0

@ Амели. Вы определяете свою кодировку как ASCII, но 'json_encode' жалуется? Это ... странно, мягко говоря. – deceze

Смежные вопросы