我在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'];
}
?>
当从数据库中检索到值或插入到数据库中时,它们会显示为这样的???
请注意:
我该如何解决这个问题?
答案 0 :(得分:0)
从oracle数据库,当你尝试获取数据时,通常你会得到字符编码将是系统中安装的客户端的编码类型(你安装了php的机器)。此编码将是oracle客户端的Windows注册表的charset。 (请参阅HKEY_LOCAL_MACHINE\SOFTWARE\ORACLE\KEY_OraClient11g_home1
),密钥为NLS_LANG
。如果您搜索上述键的值,您将获得类似ARABIC_UNITED ARAB EMIRATES.AR8MSWIN1256
的内容。请注意,编码类型为AR8MSWIN1256
。在字符映射数组中,它映射到windows-1256
(windows-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" />
我认为这可以解决您的问题。