php - PHP/MySQL 仅部分支持 Unicode 字符?

标签 php mysql mysqli unicode iso-8859-1

我编写了一个 PHP 脚本,它创建 5 个数据库并插入一些数据(使用 $mysqli->multi_query)。当我尝试时,unicode (ä ö ü ß •) 被破坏了,所以我对整个 sql 查询调用了 utf8_decode。但是,这仅适用于 ä ö ü,不适用于 ß •,也不适用于大写字母 Ä Ö Ü。这真的让我很困惑。

输出ß:�?Ÿ

我不是不同字符编码方面的专家,但到目前为止,我总是设法获得正确的输出。

我的所有文件均以 UTF-8 和元标记编码

<meta charset="utf-8">

每个网站都有。

有人可以帮我解决这个问题吗?

这是 SQL 查询的部分内容(非常非常长)

-- phpMyAdmin SQL Dump
-- version 4.6.5.2
-- https://www.phpmyadmin.net/
--
-- Host: 127.0.0.1
-- Erstellungszeit: 22. Mrz 2017 um 21:29
-- Server-Version: 10.1.21-MariaDB
-- PHP-Version: 5.6.30

SET SQL_MODE = "NO_AUTO_VALUE_ON_ZERO";
SET time_zone = "+00:00";


/*!40101 SET @OLD_CHARACTER_SET_CLIENT=@@CHARACTER_SET_CLIENT */;
/*!40101 SET @OLD_CHARACTER_SET_RESULTS=@@CHARACTER_SET_RESULTS */;
/*!40101 SET @OLD_COLLATION_CONNECTION=@@COLLATION_CONNECTION */;
/*!40101 SET NAMES utf8mb4 */;


CREATE TABLE `forum` (
  `id` int(10) UNSIGNED NOT NULL,
  `autor` varchar(50) NOT NULL,
  `text` varchar(2000) NOT NULL,
  `datum` int(10) UNSIGNED NOT NULL
) ENGINE=InnoDB DEFAULT CHARSET=latin1 ROW_FORMAT=COMPACT;

<强>。 。 .

/*!40101 SET CHARACTER_SET_CLIENT=@OLD_CHARACTER_SET_CLIENT */;
/*!40101 SET CHARACTER_SET_RESULTS=@OLD_CHARACTER_SET_RESULTS */;
/*!40101 SET COLLATION_CONNECTION=@OLD_COLLATION_CONNECTION */;

最佳答案

  1. 切勿永远使用 PHP utf8_decode()功能。它唯一能做的就是通过(糟糕地)将 UTF-8 数据转换为 ISO8859-1 来不可恢复地破坏 UTF-8 数据。将其从应用程序中出现的任何位置删除。

  2. 您的 table 有 DEFAULT CHARSET=latin1 。将其更改为 utf8mb4存储 Unicode 文本:

    ALTER TABLE `forum` CONVERT TO CHARACTER SET utf8mb4;
    

    如果且仅当您的 MySQL 安装太旧而无法支持 utf8mb4 ,使用utf8反而。 utf8字符集支持 Unicode 的有限子集(特别是,它不支持表情符号),但至少支持比 latin1 更广泛的字符选择。 .

关于php - PHP/MySQL 仅部分支持 Unicode 字符?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/43021567/

相关文章:

javascript - 单击 [提交,操作] 按钮时显示模式

mysql - 使用sequelize遍历多个表

php - 我可以在 PHP 中混合使用 MySQL API 吗?

javascript - 为什么我的对话框不起作用?

javascript - PHP/Javascript - 在管理端启动/停止计数器

mysql - 如何从每组行的最小和最大时间戳中选择mysql数据

php - 在 PHP 的树中转换具有逗号分隔值的字符串

php通过登录页面连接到数据库

php - 谁在开发 PDO、mysql、mysqli 等 PHP 数据库扩展?

php - 我想阻止这两种类型的网站访问者。我该怎么做呢?