php oracle亂碼是由於沒有正確的配置字元集資訊所導致的,其解決方案是透過PLSQL運行「select * from V$NLS_PARAMETERS;」來取得oracle的字元集,並重新設定正確的字元集即可。
PHP Oracle 中文亂碼問題
通常缺省設定連接Oracle在處理中文時都會遇到亂碼問題,其實絕大部分人都知道在客戶端連接Oracle服務端前首先要在客戶端正確的設定服務端的字符集信息,通過PLSQL運行“select * from V$NLS_PARAMETERS;” 即可獲取oracle的字符集,變數NLS_CHARACTERSET對應的就是我們需要的字元集,例如我這裡就是「WE8ISO8859P1」
推薦:《PHP教學》
#設定字元集的方法如下:
方法一: 連線前設定環境變數
putenv("NLS_LANG=AMERICAN_AMERICA.WE8ISO8859P1"); $conn=oci_new_connect($config['username'], $config['password'],$config['database']);
方法二:連線時設定環境變數
$conn=oci_new_connect($config['username'], $config['password'],$config['database'],'we8iso8859p1');
## 方法二:連線時設定環境變數
echo iconv('GBK','utf-8',$vo["USERNAME"]);
## 你會發現透過上述設定讀取的中文資料在不設定編碼的情況下可以正常顯示,而一旦在頁面(假如頁面的字元集為UTF8)中使用則仍為亂碼,
並且即便做轉換從we8iso8859p1 -> utf-8 依舊為亂碼。
其實仔細研究後發現oci8 以資料庫編碼WE8ISO8859P1取得資料後自動轉換為作業系統缺省的編碼格式,假如我所使用的作業系統缺省編碼為GBK,則實際上透過OCI8讀取後,字元的編碼即為GBK, 因此在頁面使用的時候編碼轉換應該為 從GBK -> utf-8 :
### ###rrreee以上是怎麼解決php oracle亂碼問題的詳細內容。更多資訊請關注PHP中文網其他相關文章!