У меня возникли проблемы с поиском наилучшего способа обработки символов UTF8 в PHP. Я могу загружать данные UTF8 (китайские символы) в Vertica просто прекрасно, и их можно увидеть там, где используется клиент JDBC, поэтому я знаю, что данные записываются правильно.
Однако, когда я запрашиваю через PHP, строки, содержащие символы UTF8, проходят через нули. Однако я могу сделать что-то вроде обертывания поля UTF8 в функции URI_PERCENT_ENCODE, а затем сделать urldecode для данных в PHP, который правильно выводит символы.
Есть ли какие-либо настройки драйвера ODBC или настройки PHP, которые вы можете рекомендовать для более удобного управления UTF8?
Мы запускаем PHP 5.3, 64 бит.
Что бы это ни стоило, при работе с 64-битным ODBC Vertica для Windows и вызовом SQLDescribeColW для описания таблицы с китайским именем и китайскими именами столбцов (например, с описанием SQL-выражения, такого как «select * from mytable»), имена, которые были закодированы в «фанки UTF-8».
В кодировке «funky UTF-8» или FUTF-8 используется wchar_t [] (в Windows это массив из 16-битных значений), где в каждой записи в массиве имеется один байт реального UTF-8.
Например, если имя столбца было «时髦», кодировка UTF-16 которого равна 65f6h, 9ae6h (два символа, по 16 бит каждая), а его кодировка UTF-8 – e6h, 97h, b6h, e9h, abh, a6h (два символа, По 3 байта), а затем в FUTF-8 вы получите: 00e6h, 0097h, 00b6h, 00e9h, 00abh, 00a6h (6 символов, по 16 бит каждый).
Я предполагаю, что это то, что помещает значение null для PHP. Я бы назвал это ошибкой драйвера ODBC.