2015-05-05 40 views
1

时,我有我以前使用ASP.NET几年写了一个Web应用程序,它保存的表单数据为MDB数据库,然后当用户选择转换为XLS文件。奇怪的字符集插入MDB数据库使用PHP

我改变形式处理代码为PHP和我注意到,阿拉伯字符被转换为不同的字符集。

实施例:تجربة将被存储为تجربة 我可以使用此online tool在UTF8编码场粘贴时,它把它转换回树胶。

这里是代码:

ini_set('default_charset', 'utf-8'); 
header('Content-Type: text/html;charset=utf-8'); 
$dbName = "DB\DB.mdb"; 
if (!file_exists($dbName)) { 
    die("Could not find database file."); 
} 

$connection = odbc_connect("Driver={Microsoft Access Driver (*.mdb)};Dbq=$dbName", "", ""); 
odbc_exec($connection , "SET NAMES 'UTF8'"); 
odbc_exec($connection , "SET client_encoding='UTF-8'"); 

$stmt="INSERT INTO arabic_table (val) VALUES('".$_POST["arabicTxT"]."')"; 
$resultset=odbc_exec($connection,$stmt); 

请注意: 我转换所有文件为UTF-8使用记事本。 我通过“echo'ing将它们存储在他们面前back测试阿拉伯文输入,而他们是在正确的字符集。 ASP确实存储阿拉伯字符。 我的共享主机中没有任何PDO驱动程序。

我寻觅了好几个小时的解决方案,没有运气,任何想法?

在此先感谢。

+1

你的代码是开放的SQL注入。您应该使用的方法制得的语句(https://php.net/manual/en/function.odbc-prepare.php)把任何变量数据插入SQL查询时。 – tim

+0

谢谢你指出。 – Ploxer

回答

1

您的问题,从长期不足的方式茎

  • 访问ODBC驱动程序(包括Jet和ACE)和
  • PHP的ODBC机制(老odbc_功能和新的两PDO_ODBC

处理对方。您无法使用Access ODBC和PHP为所有Unicode字符提供完整且无缝的支持。

在PHP下获得完整Unicode支持的唯一方法是使用COM和ADODB对象(Connection,RecordsetStream)。这显然要求您的PHP应用程序在Windows服务器上运行。欲了解更多详情,请参阅我的其他回答here

+0

我结束了使用COM建议与阿拉伯语字符集 $ db_connection =新COM(“ADODB.Connection”,NULL,1256);' 我必须先使用iconv将字符串从utf8转换为windows-1256。 谢谢你,你的知识救了我。 – Ploxer

0

$编码=的iconv( “CP1257”, “UTF-8”,$字符串) 阿拉伯语

相关问题