在UTF-8数据库中,如何避免php程序中的垃圾字符问题?
此问题是由于php页中的数据是UTF-8编码引起的。当数据发送到驱动管理器时,驱动管理器发现DBMaster支持unicode ODBC函数,所以驱动管理器会把UTF-8数据当做本地数据处理(操作系统默认的语言编码,例如:日文系统中的Shift-JIS),并将数据转换为unicode。此时,转化的Unicode数据是错误的数据,所以它从DBMaster保存/取出时就会导致垃圾数据流入/流出。
解决方法:使用DBMaster ANSI驱动器可避免驱动管理器将UTF-8数据转化为Unicode数据。在安装DBMaster ANSI驱动器前,需对注册文件(dbmaster51_ansi_driver.reg)进行适当的设置更改。
ANSI驱动注册文件内容有:
Windows Registry Editor Version 5.00
[HKEY_LOCAL_MACHINE\SOFTWARE\ODBC\ODBCINST.INI\Dbmaster 5.1 ANSI Driver]
"Driver"="d:\\Dbmaster\\5.1\\bin\\DMAPI51a.DLL"
"Setup"="d:\\Dbmaster\\5.1\\bin\\DMSET.DLL"
"APILevel"="1"
"ConnectFunctions"="YYN"
"CPTimeout"="60"
"DriverODBCVer"="03.00"
"FileUsage"="0"
"SQLLevel"="1"
步骤包括:
(1) 如果驱动名称不是5.1,把驱动器名称改为DBMaster 5.1 ANSI的驱动名称
(2) 修改驱动程序并设置安装目录
(3) 如果不是5.1版本,把dmapi51a.dll修改为dmapixxa.dll
因此,如果用户使用DBMaster 5.1,只需进行步骤(2)。
请从驱动管理器中删除DSN(默认为数据库名),并使用"DBMaster 5.1 ansi 驱动"重新注册DSN。安装dmapi51a.dll后,DBMaster ANSI驱动程序已经存在,只需注册它即可。DBMaster ANSI驱动器只删除Unicode ODBC函数。