2015-05-05 39 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」,$字符串) 阿拉伯語

相關問題