php - META 值 charset=UTF-8 防止 UTF-8 字符显示

标签 php mysql utf-8 character-encoding meta-tags

我制作了一个测试程序,它基本上只是一个可以输入字符的文本区域,当我单击“提交”时,字符将写入 MySQL 测试表(使用 PHP)。

测试表的排序规则为UTF-8。

如果我想写一个é,脚本就可以正常工作。或ú到数据库它写得很好。但是如果我将以下元语句添加到 <head>我的页面区域:

<meta http-equiv="content-type" content="text/html; charset=UTF-8">

...字符开始变得困惑。

我的理论是,服务器强加了一些运行良好的编码,但是当我添加 UTF-8 指令时,它会覆盖此服务器编码,并且此 UTF-* 编码不包含诸如 é 之类的字符。和ú 。 但我认为 UTF-8 编码了所有(克林贡语等)字符。

基本上我的程序可以运行,但我想知道为什么当我添加指令时却不能运行。 我想我错过了一些东西。

非常感谢任何帮助/教导。

提前致谢。

最佳答案

首先,PHP 通常不处理 Unicode 字符集或 UTF-8 字符编码。除了(小心使用)mb_...函数之外,它仅将字符串视为二进制数据。

其次,您需要告诉 MySQL 客户端库您正在使用什么字符集/编码。 “SET NAMES”SQL 命令完成这项工作,不同的 MySQL 客户端(mysql、mysqli 等)以不同的方式提供对其的访问,例如http://www.php.net/manual/en/mysqli.set-charset.php

您的浏览器和 MySQL 客户端可能都默认为 latin1,并且巧合地匹配。 MySQL 然后知道将 latin1 二进制数据转换为 UTF-8。当您将浏览器字符集/编码设置为 UTF-8 时,MySQL 客户端会将 UTF-8 数据解释为 latin1,并错误地对其进行转码。

因此,解决方案是将 MySQL 客户端设置为与浏览器对 PHP 的输入相匹配的字符集。

另请注意,表排序规则与表字符集不同 - 排序规则是指字符串的比较和排序方式。令人困惑的东西,希望这有帮助!

关于php - META 值 charset=UTF-8 防止 UTF-8 字符显示,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/3574564/

相关文章:

php - .htaccess - 尝试所有 DirectoryIndex 并在文件不存在时重写

php - 主页和子文件夹的单个 "nav.php"

MySQL/InnoDB - 叶节点中的 PK 顺序

mysql - 请求已超过 CFQUERY 标记允许的时间限制错误

php - 我们如何使用 php 将两个数据库合并到新数据库中

python - 有没有人能够使用 python 的 xlwt 写出 UTF-8 字符?

php - 将请求的ID发送到PHP

php - 当我创建表时,SQL 不断反射(reflect) getdate 的语法错误

unicode - UTF-8编码为什么前缀10?

Python:Unicode 问题