首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >PHP -文件获取内容和正确的编码

问PHP -文件获取内容和正确的编码
EN

Stack Overflow用户
提问于 2016-04-28 13:37:06
回答 1查看 96关注 0票数 0

我正在挣扎于一个小脚本,它负责两件事:-截断数据库-将文件上传到数据库

看起来是这样:

代码语言:javascript
复制
<?php
error_reporting(E_ALL);
ini_set('display_errors', '1');


$mysql_host = 'localhost';
$mysql_username = 'x';
$mysql_password = 'y';
$mysql_database = 'z';

$db = new PDO('mysql:dbname='.$mysql_database.';host='.$mysql_host,$mysql_username,$mysql_password);

// works not with the following set to 0. You can comment this line as 1 is default
$db->setAttribute(PDO::ATTR_EMULATE_PREPARES, 1);

function truncate_db()
{
    global $db;

    $sql_query_1 = "
    TRUNCATE TABLE `VISITS`; 
    TRUNCATE TABLE `ANIMALS`;
    TRUNCATE TABLE `DOCTORS`;
    TRUNCATE TABLE `PAYMENTS`;
    TRUNCATE TABLE `CUSTOMER`
    "; 

    try {
        $stmt = $db->prepare($sql_query_1);
        $stmt->execute();
        echo "Truncate action - OK";
    }
    catch (PDOException $e)
    {
        echo $e->getMessage();
        die();
    }
}

function import_db()
{
    global $db;

    try
       {
         $sql_query_2 = implode(array_map(function ($v) {
            return file_get_contents($v);
            }, glob(__DIR__ . "/*.sql")));

         $qr = $db->exec($sql_query_2); 
         echo "Import action - OK";
       }
       catch (PDOException $e) 
       {
         echo 'Connection failed: ' . $e->getMessage();
    }
}

truncate_db();
echo '<br />';
import_db();

$db = null;
?>

我要上传到数据库的问题文件(sql )包含特殊字符(如ś、ó、ę等)。在此之后,我在数据库中有一个问题,即有些单词不再包含这些符号。上传后,我有一些符号,如:import_db,等等。如何编辑函数()来保留这些字符呢?我想:

代码语言:javascript
复制
mb_convert_encoding

但是我不知道如何将它合并到我的代码中;/在我的DB表中,包含单词(包含特殊字符)的列被设置为: UTF8_General_CI。谢谢!

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2016-04-30 15:31:53

我不清楚你的问题是什么

截断文本是当您尝试插入Señor时,但是发现只有Se出现在表中。这种形式的截断通常是由

  • 客户端使用latin1 (或latin2等)编码的重音字符,以及
  • SET NAMES utf8在INSERT (或LOAD DATA)期间生效

也就是说,要么用utf8获取文本,要么修改告诉MySQL编码的内容。

如果您可以获得文件内容的十六进制,ś ó ę应该是2字节十六进制C59B C3B3 C499在utf8中。latin1只将ó作为单个字节的F3。在latin2中,这些是B6 F3 EA,所以也许这就是您来自的地方?

SET NAMES所说的内容与表/列所建立的CHARACTER SET之间的不匹配是可以的。MySQL将在它们被传输时转换编码。

在使用mb_convert_encoding时,不要使用MySQL或任何其他转换函数,这只会增加混乱。

另外,一次只做一个TRUNCATEs。API不喜欢多个语句。

票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/36916382

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档