2012-01-30 129 views
0

插入阿拉伯值I有這樣的代碼在Drupal 6檢索從Oracle DATABSE阿拉伯值:Oracle連接檢索或從數據庫

  <?php 
      session_start(); 
      $conn=oci_connect('localhost','pass','IP....'); 
      $stid=oci_parse($conn,"select arabic_name from arabic_names_table"); 
      oci_execute($stid); 
      if($row-oci_fetch_array($stid,OCI_ASSOC+OCI_RETURNS_NULLS)) 
       { 
       $name_ar=$row['arabic_name']; 
       } 
      ?> 

當值是從DB中檢索或插入到它們看起來像的DB這個 ???

請注意:

  • 我的Oracle數據庫讀取正常阿拉伯字符。從PL/SQL我可以插入阿拉伯值
  • 我已經安裝了mbstring
  • 我已啓用utf-8編碼。

我該如何解決這個問題?

+0

什麼是數據庫字符集?什麼是國家字符集? 「ARABIC_NAMES_TABLE」中的數據類型是「ARABIC_NAME」? – 2012-01-30 20:44:56

+2

除了Justin的問題,您是否在連接到Oracle之前在客戶端環境中設置了NLS_LANG環境變量? – 2012-01-31 01:30:28

+0

這可能會有所幫助:http://stackoverflow.com/questions/4295866/arabic-characters-in-oracle-database – alfasin 2012-02-24 00:36:37

回答

0

從Oracle數據庫中,當您試圖獲取數據,通常你會得到的字符編碼將是(你安裝了PHP的計算機)在系統中安裝客戶端的編碼類型。該編碼將是oracle客戶端的Windows註冊表的字符集。 (見HKEY_LOCAL_MACHINE\SOFTWARE\ORACLE\KEY_OraClient11g_home1),密鑰爲NLS_LANG。如果你搜索上面的鍵的值,你會得到像ARABIC_UNITED ARAB EMIRATES.AR8MSWIN1256。請注意,編碼類型是AR8MSWIN1256。在字符映射數組中,它映射到windows-1256windows-1256 => AR8MSWIN1256)。

請參閱此鏈接http://websvn.projects.ez.no/wsvn/ezoracle/?op=comp&compare[]=%[email protected]&compare[]=%[email protected]

也就是說,你從數據庫中讀取數據之後的char編碼將windows-1256。現在,如果您的網頁使用的是utf-8字符集,則需要將該字符串轉換爲utf-8。爲此,您可以使用iconv()

$win1256 = iconv('windows-1256', 'utf-8', $my_string); //$my_string -> windows-1256  
echo $win1256; // Results the utf-8 format . 

如果你仍然面臨您檢查字符集在頁面中的問題,它必須是utf-8<meta http-equiv="Content-Type" content="text/html; charset=utf-8" />

我認爲這將解決您的問題。