php - 再次... php-mysql 导出 UTF-8 问题

标签 php mysql utf-8 export special-characters

我开发了一个 PHP/MySQL 应用程序,其中存储了一个表名称。这些名称有时包含特殊字符(如 é、à、ë...)。

创建表时,我忘记将搭配项设置为 UTF-8,现在设置为 LATIN1_SWEDISH_CI。 因此某些数据在 phpMyAdmin 中显示不正确。但是当我在 PHP 页面上显示名称时,这些特殊字符会正确显示。这是我使用 UTF-8 的 PHP 文件的摘录

<?php ... ?>
<html>
  <head>
    <meta http-equiv="Content-Type" content-"text/html; charset="UTF-8">
....

就像我说的,特殊字符按其应有的方式显示。到目前为止...没问题。

但现在我想将该数据导出到 CSV 文件中,你猜怎么着? CSV 文件中不包含特殊字符。 我的 PHP 导出文件包含以下代码行:

<?php
mysql_query("SET NAMES utf8");
header('Content-Type: text/html; charset=UTF-8');
...

但是没有显示特殊字符?

有人能解决这个问题吗?因为我发现在 Excel 中打开 CSV 并使用“查找和替换”有点可笑。 使用 HTML 转义码是不可能的。这就是为什么有 UTF-8,不是吗?

最佳答案

您存储了 UTF-8 编码的数据,MySQL 将其视为 Latin-1 数据。 MySQL 不会提示这一点,因为任何任意字节序列都是有效的 Latin-1。由于用于检索数据的连接的连接字符集与用于插入数据的连接字符集相同,因此您的网页上会显示正确的数据。但是,如果您在一个实用程序中查看数据,该实用程序费尽心思地显示实际存储的字符,您将看到错误编码的文本,因为那是您实际存储的内容。

您需要做两件事:首先,您需要更改数据库连接代码,以确保与数据库建立的所有连接都使用 UTF-8 字符集。这可以通过使用设置文件或每次连接时发出 SET NAMES 语句来完成。

其次,您需要更正数据库中已存储的错误编码数据。 不要通过修改表直接将字符集更改为UTF-8;如果这样做,您最终将得到双 UTF-8 编码的数据。相反,使用更改表查询将列更改为二进制字符集,然后再次将表更改为 UTF-8。

关于php - 再次... php-mysql 导出 UTF-8 问题,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/10295872/

相关文章:

php - utf8 表示为普通文本

php - Laravel - 无法使用 storeAs 将文件保存到 public_path

php - 从 PHP 中的字符串中删除所有连字符、特殊字符等

mysql - 为什么 MySQL 查询不返回最新行

android - 日本字符在 Android TextView 和按钮中显示奇怪的间距

perl - 为什么使用非拉丁字母语言环境的 Encode::decode 在本地化 strftime 输出上会崩溃?

php - 通过php在mysql中错误的参数计数错误

php gd 像素化太锐利

javascript - 如果在数据库中插入新行,我如何提醒用户

mysql 访问被拒绝创建数据库