2013-10-17 2 views
1

나는 몇 가지 문제 PHP에서 UTF8 문자를 처리하는 가장 좋은 방법을 알아 냈어을 꾸게와 Vertica의에서 UTF8 문자열을 쿼리 도움이 필요합니다. Vertica에 UTF8 데이터 (중국어 문자)를로드 할 수 있으며 JDBC 클라이언트를 사용할 때 데이터를 볼 수 있으므로 데이터가 올바르게 기록되고 있음을 알 수 있습니다. 내가 PHP를 통해 쿼리 할 때는 PHP ODBC 드라이버

그러나, UTF8 문자가 포함 된 문자열은 널 (null)로 통해왔다. 그러나 URI_PERCENT_ENCODE 함수에서 UTF8 필드를 감싸는 것처럼 처리 할 수 ​​있습니다. 그런 다음 문자를 올바르게 출력하는 PHP의 데이터에 대해 urldecode를 수행합니다.

더 우아하게 UTF8을 처리하기 위해 추천 할 수있는 ODBC 드라이버 설정, 또는 PHP 설정이 있습니까?

우리는 PHP 5.3, 64 비트를 실행하고 있습니다.

답변

0

Windows 용 Vertica 64 비트 ODBC를 사용하고 중국 이름과 중국어 열 이름이있는 테이블을 설명하기 위해 SQLDescribeColW를 호출 할 때 (예 : 'select * from mytable'과 같은 SQL 문을 설명 할 때) 반환 된 이름은 "funky UTF-8"로 인코딩됩니다.

"funky UTF-8"또는 FUTF-8 인코딩은 wchar_t []를 사용합니다 (Windows에서는 16 비트 값의 배열입니다). 배열의 각 항목에 하나의 실제 UTF-8이 있습니다 바이트.

예를 들어, 열 이름 인 경우 "时髦"그 UTF-16 인코딩 65f6h, 9ae6h (두 문자 각각이 16 비트)이며 그 UTF-8 인코딩이다 e6h, 97H, b6h, e9h, (16 비트 각각 6 자) 00e6h, 0097h, 00b6h, 00e9h, 00abh, 00a6h : 아브 다음 FUTF-8 A6H (두 글자, 3 바이트 각) 당신은 얻을 것입니다.

나는이 PHP에 null에두고 어떤 것을 생각한다. 나는 그것을 ODBC 드라이버의 버그라고 부를 것이다.