当前位置: 首页 > 面试题库 >

每当使用£时,MySQL或PHP都会附加一个Â

常鸿朗
2023-03-14
问题内容

所提供的答案都很棒,我在Alnitak的答案评论中提到,我需要查看CSV生成脚本,因为无论出于何种原因,它都不输出UTF-8。

正如正确指出的那样,它曾经输出UTF-8-Ye Olde Microsoft Excel存在问题,它没有按照我希望的方式进行编码。

我现有的CSV生成看起来像:

// Create file and exit;
$filename = $file."_".date("Y-m-d_H-i",time());
header("Content-type: application/vnd.ms-excel");
header("Content-disposition: csv" . date("Y-m-d") . ".csv");
header( "Content-disposition: filename=".$filename.".csv");
echo $csv_output;

现在看起来像:

// Create file and exit;
$filename = $file."_".date("Y-m-d_H-i",time());
header("Content-type: text/csv; charset=ISO-8859-1");
header("Content-disposition: csv" . date("Y-m-d") . ".csv");
header("Content-disposition: filename=".$filename.".csv");

echo iconv('UTF-8', 'ISO-8859-1', $csv_output);

-------------------------------------------------- -----

原始问题

你好

我有一个收集数据的表单,表单可以正常运行,但是我刚刚注意到,如果有人键入或使用“£”符号,则MySQL DB最终会以“£”结尾。

不确定在哪里或如何阻止这种情况的发生,需要遵循的代码和数据库信息:

MySQL细节

mysql> SHOW COLUMNS FROM fraud_report;
+--------------+--------------+------+-----+---------+----------------+
| Field        | Type         | Null | Key | Default | Extra          |
+--------------+--------------+------+-----+---------+----------------+
| id           | mediumint(9) |      | PRI | NULL    | auto_increment |
| crm_number   | varchar(32)  | YES  |     | NULL    |                |
| datacash_ref | varchar(32)  | YES  |     | NULL    |                |
| amount       | varchar(32)  | YES  |     | NULL    |                |
| sales_date   | varchar(32)  | YES  |     | NULL    |                |
| domain       | varchar(32)  | YES  |     | NULL    |                |
| date_added   | datetime     | YES  |     | NULL    |                |
| agent_added  | varchar(32)  | YES  |     | NULL    |                |
+--------------+--------------+------+-----+---------+----------------+
8 rows in set (0.03 sec)

PHP功能

function    processFraudForm($crm_number, $datacash_ref, $amount, $sales_date, $domain, $agent_added) {

    // Insert Data to DB
    $sql    = "INSERT INTO fraud_report (id, crm_number, datacash_ref, amount, sales_date, domain, date_added, agent_added) VALUES (NULL, '$crm_number', '$datacash_ref', '$amount', '$sales_date', '$domain', NOW(), '$agent_added')";
    $result = mysql_query($sql) or die (mysql_error());

    if ($result) {
        $outcome = "<div id=\"success\">Emails sent and database updated.</div>";
    } else {
        $outcome = "<div id=\"error\">Something went wrong!</div>";
    }

    return $outcome;
}

示例数据库条目

+----+------------+--------------+---------+------------+--------------------+---------------------+------------------+
| id | crm_number | datacash_ref | amount  | sales_date | domain             | date_added          | agent_added      |
+----+------------+--------------+---------+------------+--------------------+---------------------+------------------+
| 13 | 100xxxxxxx | 10000000     | £10.93 | 18/12/08   |  blargh.com        | 2008-12-22 10:53:53 | agent.name |

问题答案:

您将看到的是UTF-8编码-
这是一种以相对紧凑的格式存储Unicode字符的方法。

英镑符号0x00a3在Unicode中具有值,但是当它以UTF-8编写时,它即成为0xc2 0xa3存储在数据库中的内容。您的数据库表似乎已设置为使用UTF-8编码。这是 一件好事

如果您从数据库中拉出值并将其显示在UTF-8兼容终端(或声明为UTF-8编码的网页)上,它将再次看起来像是普通的井号。



 类似资料:
  • 问题内容: 是否有一种方法可以使每次调用方法时都会被调用的“超级方法”,即使对于未定义的方法也是如此?有点像这样: 编辑- 细节:我有一个库,该库进行了很多更新,并且每次更新都变得晦涩难懂。为了简化我的工作流程,我正在使程序自动更新库(需要执行我想做的事情,我不会具体说明原因,但是我的程序可以与将来的更新一起使用)并且我有混淆映射与库一起下载时,我想制作一种例如称为的代理,然后在我调用它时,将获得

  • 我正在为注释的项目添加jQuery autocomplete我需要标记(在中),但是当我添加它时,我得到以下错误:

  • 问题内容: 由于程序员被迫捕获所有已检查的异常,因此在出现任何问题时都会抛出已检查的异常。我想回退任何这些期望。在每个注释上书写都非常容易出错,因此我想告诉spring:“每写一次,我的意思是”。 我知道,我可以创建一个自定义批注,但这似乎是不自然的。 那么有没有办法告诉spring它应该如何在 全球范围内 处理已检查的expeting ? 问题答案: 自定义快捷方式注释 我知道,我可以创建一个自

  • 问题内容: 当我尝试使用DomDocument将UTF-8字符串写入XML文件时,实际上是写入字符串的十六进制表示法,而不是字符串本身。 例如: 代替:ירושלים 任何想法如何解决问题? 问题答案: 好了,你去: 会正常工作,因为在这种情况下,您构造的文档将保留指定为第二个参数的编码: 但是,一旦将XML加载到未指定编码的Document中,您将丢失在构造函数中声明的所有内容,这意味着: 不会

  • 问题内容: 每当我尝试将其插入仓库时,git都要求两者。 每次重新输入密码都没有问题,但是问题在于输入用户名。我用来克隆我的仓库。 因此,我该如何配置git,这样就不会在每一个上都要求它了。 我是Linux的新手,但Windows中的IIRC 仅要求输入密码。 问题答案: 编辑(由主持人和评论建议使用@ dk14) 警告:如果您从答案中使用密码,您的密码将完全未加密(“原样”)存储在。请查阅下面的

  • 问题内容: 如何在不比较键的情况下将一个数组追加到另一个数组? 最后应该是: 如果我使用或,则将导致以下结果之一: 这样做应该是一件值得做的事,但是要用一种更优雅的方式: 问题答案: 是一种优雅的方式: 做类似的事情: 将不起作用,因为运算符实际上并未合并它们。如果它们的键与相同,则不会执行任何操作。