2017-01-13 33 views
1

PHPでodbc_connect()を使用してOracleのODBCデータソースに接続しようとすると、UTF-8サポートに問題があります。PHPへのODBC接続、UTF-8なし

また、これはすべて32ビットで行われています。私はテストのためのoracle XE DBとinstaclient11_2 32bitドライバを使用しています、ODBCデータソース32it + WAMP32bitサーバに置かれています。

Althougt Oracle 12c DBおよびクライアントのHome 10g 32bitドライバでも同じ結果が得られます。

@TODAY 64ビットのinstanclientドライバでこれをすべてテストし、64ビットWAMPサーバーにODBC 64DataSourceを追加しました。私は見つけるカント

ĶAĶIS, čaļi 
Guntārs Šalts, čaļi 

:corretly文字を表示するにはまだ運ません...

<html> 
<head> 
    <meta http-equiv="Content-Type" content="text/html; charset=utf-8" /> 
</head> 
<body> 

<?php 
$connect = odbc_connect("XEXDB", "username", "password"); 

$query = "SELECT col, 'čaļi' FROM TESST"; 

$result = odbc_exec($connect, $query); 

while(odbc_fetch_row($result)){ 
    $name = odbc_result($result, 1); 
    $surname = odbc_result($result, 2); 
    echo "$name, $surname <br/>"; 
} 

odbc_close($connect); 

?> 

私はこのコードから取得する結果:

?A?IS, A?aA?i 
Gunt?rs Salts, A?aA?i 

しかし、あるべき書く方法odbc_connect()$dsnを強制的にcharset=utf-8、これまでに$ conn_stringをcharset=utf-8で動作させることはできません。

また、utf8_encode()utf8_decode()を使用しようとしました(これは私が必死でした)。

誰も似たような問題を抱えているのですか、あるいは誰かが私が試してみることのできる提案がありますか?

+0

Oracleのようなロックは、適切なUTF-8を返します(1ではなく2文字を表示するため)。表示に関する問題に焦点を当てます。試してみてください 'echo"čaļi ";'おそらくどちらもうまくいかず、この場合問題はOracleに関係しません。 –

+0

@WernfriedDomscheit私はすでにそれを試して、それは別の何か、私はオプションができないので、示唆することができますcorretlyを表示します。 Haventは私がテストしたすべてを言及しましたが、私はたくさんしました。 – arccuks

答えて

0

私は、ODBCの復帰とORACLE DBへのADO接続さえも同じ返品を見つけました。 UNICODE文字の代わりに。

この問題を解決するには、ORLSLEキー用の32のun 64ビットの場所でWINDOWS REGISTRYのDB文字セットにNLS_LANG文字列値を追加する必要がありました。

HKEY_LOCAL_MACHINE\SOFTWARE\ORACLE    --64 bits 
HKEY_LOCAL_MACHINE\SOFTWARE\WOW6432Node\ORACLE --32 bits 

と文字列値(REG_SZ)と私の場合はVALUEのために:

"NLS_LANG"="LATVIAN_LATVIA.BLT8MSWIN1257" 

そして全体像について、誰かがまだそれを取得していない場合、私は、REGファイルのダンプを追加しました:

[HKEY_LOCAL_MACHINE\SOFTWARE\ORACLE] 
@="" 
"NLS_LANG"="LATVIAN_LATVIA.BLT8MSWIN1257" 
関連する問題