1

我在找出在 PHP 中处理 UTF8 字符的最佳方法时遇到了一些麻烦。我能够很好地将 UTF8 数据(中文字符)加载到 Vertica 中,并且在使用 JDBC 客户端时可以在那里看到它们,所以我知道数据被正确记录。

但是,当我通过 PHP 查询时,包含 UTF8 字符的字符串会作为空值出现。但是,我可以做一些事情,比如将 UTF8 字段包装在 URI_PERCENT_ENCODE 函数中,然后对 PHP 中的数据进行 urldecode,从而正确输出字符。

是否有任何 ODBC 驱动程序设置或 PHP 设置可以推荐以更优雅地处理 UTF8?

我们正在运行 PHP 5.3,64 位。

4

1 回答 1

0

无论如何,当使用 Vertica 64 位 ODBC for Windows 并调用 SQLDescribeColW 来描述具有中文名称和中文列名的表(即描述类似“select * from mytable”的 SQL 语句)时,返回的名称编码为“时髦的 UTF-8”。

“funky UTF-8”或 FUTF-8 编码使用 wchar_t[](在 Windows 上它是一个 16 位值的数组),其中在数组的每个条目中,都有一个 real-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 位)。

我想这就是为 PHP 设置 null 的原因。我称之为 ODBC 驱动程序的错误。

于 2014-02-19T12:32:30.433 回答