我编写了一个 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 */;
最佳答案
切勿永远使用 PHP
utf8_decode()
功能。它唯一能做的就是通过(糟糕地)将 UTF-8 数据转换为 ISO8859-1 来不可恢复地破坏 UTF-8 数据。将其从应用程序中出现的任何位置删除。您的 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/