2012-01-30 130 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" />

我认为这将解决您的问题。