首页 > 解决方案 > 编码-解码问题 php (CSV->MySQL)

问题描述

我正在尝试以 CSV 格式为服务器提取数据,处理并存储在 MySQL 数据库中:

当我插入我的数据库时,文本是“Atila%27s+Goonies”我希望它是“Atila's Goonies”

我一直在阅读所有文本编码主题,但我认为我缺少一个非常简单的功能。

我的要求是将此文本作为格式正确(或编码)的字符串存储在数据库中,以便稍后查询并在线显示。数据库列被整理为“utf8_unicode_ci”。我不确定它是否相关,因为如果我想在浏览器上显示,我也无法获得正确的格式。谢谢。

任何帮助,将不胜感激。

我的代码如下:

if (($handle = fopen("alliances.txt", "r")) !== FALSE) {
    while (($data = fgetcsv($handle, 1000, ",")) !== FALSE) {
        $num = count($data);

        $row++;
        $alliance_id = $data[0];
        $alliance_name = $data[1];
        $alliance_points = $data[2];
        $alliance_villages = $data[3];
        $alliance_members = $data[4];
        $alliance_rank = $data[5];
        
        
         $sql_ia = "insert into alliances (alliance_id,alliance_name, alliance_villages,alliance_members,alliance_rank,timestamp) 
                                     values (:alliance_id,:alliance_name, :alliance_villages,:alliance_members,:alliance_rank,:timestamp)";
         $st_ia = $DBcon->prepare($sql_ia);
         $st_ia->bindParam(':alliance_rank', $alliance_rank,PDO::PARAM_INT);
         $st_ia->bindParam(':alliance_id', $alliance_id,PDO::PARAM_INT);
         $st_ia->bindParam(':alliance_name',$alliance_name,PDO::PARAM_STR);
         $st_ia->bindParam(':alliance_members',$alliance_members,PDO::PARAM_INT);
         $st_ia->bindParam(':alliance_villages',$alliance_villages,PDO::PARAM_INT);
         $st_ia->bindParam(':timestamp',$timestamp,PDO::PARAM_INT);
         $author_name = $ag_row[$agency];
        
         $st_ia->execute();       
     
    }
    fclose($handle);
}

标签: phpmysqlutf-8

解决方案


尝试这个。

<?php

$encoded = 'Atila%27s+Goonies';
// Your string is URL encoded. Use urldecode() to decode.
$decoded = urldecode($encoded);

var_dump($decoded); // string(15) "Atila's Goonies"

推荐阅读