用于从数据库中检索或插入阿拉伯语值的Oracle连接

时间:2012-01-30 20:41:50

标签: php oracle drupal

我在drupal 6中有这个代码从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'];
                 }
           ?>

当从数据库中检索到值或插入到数据库中时,它们会显示为这样的???

请注意:

  • 我的Oracle数据库读取正常的阿拉伯字符。从PL / SQL我可以插入阿拉伯语值
  • 我已经安装了mbstring
  • 我启用了utf-8编码。

我该如何解决这个问题?

1 个答案:

答案 0 :(得分:0)

从oracle数据库,当你尝试获取数据时,通常你会得到字符编码将是系统中安装的客户端的编码类型(你安装了php的机器)。此编码将是oracle客户端的Windows注册表的charset。 (请参阅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[]=%2Fstable@385&compare[]=%2Fstable@386

也就是说,从数据库中获取数据后,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" />

我认为这可以解决您的问题。