Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/php/240.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Php 将csv导入mySQL数据库时出现西里尔字母编码问题_Php_Mysql_Csv_Encoding_Utf 8 - Fatal编程技术网

Php 将csv导入mySQL数据库时出现西里尔字母编码问题

Php 将csv导入mySQL数据库时出现西里尔字母编码问题,php,mysql,csv,encoding,utf-8,Php,Mysql,Csv,Encoding,Utf 8,我遇到了以下问题:我导入了一个csv文件,其中包含西里尔文的记录,这是通过使用HeidiSQL db browser完成的。我用记事本打开了.csv,并将编码更改为utf-8,然后用phpmyadmin创建了数据库,排序规则设置为utf-8\u general\u ci 导入时,我选择了UTF-8编码,导入后,HeidiSQL和phpmyadmin中的所有内容看起来都很好,我的意思是,在index.php文件中,所有内容都是可读的,但在index.php文件中不可读,其中的编码也通过设置为UT

我遇到了以下问题:我导入了一个csv文件,其中包含西里尔文的记录,这是通过使用HeidiSQL db browser完成的。我用记事本打开了.csv,并将编码更改为utf-8,然后用phpmyadmin创建了数据库,排序规则设置为utf-8\u general\u ci

导入时,我选择了UTF-8编码,导入后,HeidiSQL和phpmyadmin中的所有内容看起来都很好,我的意思是,在index.php文件中,所有内容都是可读的,但在index.php文件中不可读,其中的编码也通过设置为UTF-8
header('Content-Type:text/html;charset=utf-8')
我不知道我的错误在哪里

下面是我的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>


我们的书 作者 标题 出版商 年 版本 位置 持有人 ISBN
现在我们有:取消筛选图书>>总图书数:>>总斯托克:>>总输出:

我以前遇到过这个问题,并找到了一个解决方案:

mysqli_set_charset($db,'utf8');
无论何时打印db值,都必须使用
htmlentities

i、 e.更新的for循环是

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>";    
echo”“;
对于($i=0;$ifetch_row());
$total=$total+$row[2];
回声“;
echo“htmlentities($row[1]);”;
echo“htmlentities($row[2]);”;
echo“htmlentities($row[3]);”;
echo“htmlentities($row[4]);”;
回声“htmlentities($row[5]);”;
echo“htmlentities($row[6]);”;
echo“htmlentities($row[7]);”;
echo“htmlentities($row[8]);”;
$stoke=$row[2]-$row[3];
$tstoke=$tstoke+$stoke;
$tout=$total-$tstoke;
回声“$stoke”;
回声“;
}   
回声“;
让我告诉你一件事,你必须通过这个函数设置你的字符集,这样它才能用于你当前的数据库连接

标题用于页面而不是数据库


希望这能解决您的问题。

不要使用混合
mysql\u*
mysqli\u*
接口

utf8需要在大约4个地方建立

  • 数据库中的列--使用
    SHOW CREATE TABLE
    验证它们是否显式设置为utf8,或是否从表定义中默认设置。(仅更改数据库默认值是不够的。)
  • 客户端和服务器之间的连接。请参阅
    设置名称utf8
  • 您拥有的字节数。(可能就是这种情况。)
  • 如果要在网页中显示文本,请检查
    标记
可能发生的情况:

  • 您有utf8编码的数据(良好)
  • SET NAMES拉丁语1
    已生效(默认,但错误)
  • 列被声明为
    字符集latin1
    (默认值,但错误)

注意:
mysql\u查询('SET NAMES utf8')
无法工作,因为您的连接是通过
mysqli.*
接口进行的。

好吧,从声音上看,如果您能够从PHPMyAdmin中查找数据,那么我会说您的PHP文件有问题。您可以发布整个代码文件以供审阅吗。我已经添加了我的PHP文件的全部代码。提前谢谢。Tha谢谢。不幸的是,更新后的脚本没有解决问题。我添加了
mysqli_set\u字符集($db,'utf8');
指令并使用了htmlentities,但仍然没有结果,现在我得到了:
htmlentities(?????)
你能帮我一个忙吗,把你的输入字符串给我,即评论中的一些西里尔文字记录……很抱歉迟了回复……没问题,这里是一些字符串
841516,Бааааааааааааааазааа你可以从这里下载带有示例数据的csv文件,在上面的代码中试试这行
mysqli_集字符集($db,'cp1251');