0

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

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

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

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

...字符开始变得混乱。

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

基本上我的程序可以工作,但我想知道为什么当我添加指令时它没有。我想我错过了一些东西。

任何帮助/教学最受赞赏。

提前致谢。

4

1 回答 1

1

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

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

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

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

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

于 2010-08-26T12:36:04.023 回答