2016-01-06 75 views
0

我遇到以下問題:我導入了一個csv文件,其中包含使用HeidiSQL db瀏覽器進行的西里爾文記錄。我用記事本打開了.csv,並將編碼更改爲utf-8,然後使用設置爲UTF-8_general_ci的排序規則將phpmyadmin創建了數據庫。將csv導入到mySQL中時的西里爾字符編碼問題db

HeidiSQL import settings

當導入我選擇UTF-8編碼,進口一切HeidiSQL和phpMyAdmin的看起來不錯後,我的意思是一切是可讀的,但不能讀取我的index.php文件,其中還編碼通過設置爲utf-8 header('Content-Type: text/html; charset=utf-8'); Browser output 我不知道我的錯誤在哪裏。

這裏是我的index.php代碼:

<?php header('Content-Type: text/html; charset=utf-8');?> 
<?php include 'config.php'; ?> 
<?php include 'header.php';?> 


<?php 
$db=new mysqli("$dbhost","$dbuser","$dbpass"); 
$db->select_db("$dbname") or die ("Critical error: Could not connect to database!"); 
$query="select * from books"; 
$result=$db->query($query); 

//find number of rows 
$num_rows=$result->num_rows; 

mysql_query('SET NAMES utf8'); 
?> 



<div id="box"> 
<center> 

<form id="search" action="index.php" method="post"> 
    <input type="text" name="search" placeholder"Search your book..."/> 
    <input type="submit" value="Search"/> 
</form> 
<br> 
<h3>Our Books</h3> 
<table border="1"> 
<tr id="table_header"> 
<td>Author</td> 
<td>Title</td> 
<td>Publisher</td> 
<td>Year</td> 
<td>Edition</td> 
<td>Location</td> 
<td>Holder</td> 
<td>ISBN</td> 
</tr> 



<?php 
$total=0; 
$tstoke=0; 
$tout=0; 
for($i=0;$i<$num_rows;$i++) 
{ 
    //fetch row 
    $row=$result->fetch_row(); 
    $total=$total+$row[2]; 
    echo "<tr>"; 
    echo "<td width=\"150\">$row[1]</td>" ; 
    echo "<td width=\"250\">$row[2]</td>" ; 
    echo "<td width=\"100\">$row[3]</td>" ; 
    echo "<td width=\"30\">$row[4]</td>" ; 
    echo "<td width=\"30\">$row[5]</td>" ; 
    echo "<td width=\"30\">$row[6]</td>" ; 
    echo "<td width=\"100\">$row[7]</td>" ; 
    echo "<td width=\"30\">$row[8]</td>" ; 
    $stoke=$row[2]-$row[3]; 
    $tstoke=$tstoke+$stoke; 
    $tout=$total-$tstoke; 
    echo "<td width=\"30\">$stoke</td>" ; 
    echo "</tr>"; 
} 
echo "</table>";  
?> 
</center><br> 
<center>Now We Have : <?php echo $num_rows; ?> Defreent Books >> Total Books : <?php echo $total; ?> >> Total Stoke : <?php echo $tstoke; ?> >> Total Out : <?php echo $tout; ?></center> 
<br> 
</div> 
<?php include 'footer.php'; ?> 
</center> 
+0

好吧,從它的聲音,如果你能夠從PHPMyAdmin查詢數據,那麼我會說你的PHP文件會有問題。你可以發佈你的整個代碼文件進行審查。 – Haymaker

+0

我已經添加了我的PHP文件的整個代碼。先謝謝你。 –

回答

0

我以前遇到這個問題,並找到一個解決辦法:

mysqli_set_charset($db,'utf8'); 

,你必須使用htmlentities只要您打印分貝值..

即您更新的循環爲

echo "<table>"; 
for($i=0;$i<$num_rows;$i++) 
{ 
    //fetch row 
    $row=$result->fetch_row(); 
    $total=$total+$row[2]; 
    echo "<tr>"; 
    echo "<td width=\"150\">htmlentities($row[1]);</td>" ; 
    echo "<td width=\"250\">htmlentities($row[2]);</td>" ; 
    echo "<td width=\"100\">htmlentities($row[3]);</td>" ; 
    echo "<td width=\"30\">htmlentities($row[4]);</td>" ; 
    echo "<td width=\"30\">htmlentities($row[5]);</td>" ; 
    echo "<td width=\"30\">htmlentities($row[6]);</td>" ; 
    echo "<td width=\"100\">htmlentities($row[7]);</td>" ; 
    echo "<td width=\"30\">htmlentities($row[8]);</td>" ; 
    $stoke=$row[2]-$row[3]; 
    $tstoke=$tstoke+$stoke; 
    $tout=$total-$tstoke; 
    echo "<td width=\"30\">$stoke</td>" ; 
    echo "</tr>"; 
} 
echo "</table>";  

讓我告訴你一件事,你必須通過這個函數設置你的字符集,以便它將用於你當前的數據庫連接。

頁眉不適合您的數據庫。

希望這可以解決您的查詢。

+0

謝謝。不幸的是,更新後的腳本沒有解決問題。我已經添加了'mysqli_set_charset($ db,'utf8');'指令並使用htmlentities,但仍然沒有結果,現在我得到了:'htmlentities(??????? ????? ???)' –

+0

你能給我一個幫忙,給你輸入字符串給我,即一些西里爾文記錄在這裏的評論請.....對不起,最近的回覆... – Abbas

+0

沒問題,這裏你是一些字符串' 841516,НелиМаданскаНиколова,Дружествениспоровеисъдебнипроизводствапозаконазатърговскиярегистър,ИКТрудиправо,2012,15th ,,Бистра,9.78955E + 12',你可以從這裏下載帶有示例數據的csv文件[鏈接] (http://www.dgkv.com/upl/strip_down.csv) –

0

請勿混用mysql_*mysqli_*接口!

utf8需要在大約4個地方建立。

  • 數據庫中的列 - 使用SHOW CREATE TABLE來驗證它們是否顯式設置爲utf8或默認的表定義。 (這是不足以更改數據庫默認。)
  • 客戶端和服務器之間的連接。見SET NAMES utf8
  • 你有的字節。 (這可能是這種情況。)
  • 如果您要在網頁中顯示文本,請檢查<meta>標記。

什麼可能發生的事情:

  • 你有UTF8編碼的數據(好)
  • SET NAMES latin1已生效(默認,但錯)
  • 列被宣佈CHARACTER SET latin1(默認值,但錯誤)

注意:mysql_query('SET NAMES utf8');沒有工作,因爲您的連接是通過mysqli_*接口。