繁体   English   中英

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

[英]META value charset=UTF-8 prevents UTF-8 characters showing

我编写了一个测试程序,基本上只是一个文本区域,我可以在其中输入字符,单击提交后,这些字符将写入MySQL测试表(使用PHP)。

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

如果我想向其编写的数据库中写入éú ,则脚本可以正常工作。 但是,如果我将以下meta语句添加到页面的<head>区域中:

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

...角色开始变得混乱。

我的理论是服务器强加了一些效果很好的编码,但是当我添加UTF-8指令时,它将覆盖此服务器编码,并且该UTF- *编码不包含诸如éú这样的字符。 但是我认为UTF-8编码了所有(bar Klingon等)字符。

基本上我的程序可以运行,但是我想知道为什么当我添加指令时却没有。 我想我缺少了一些东西。

任何帮助/教学最感激。

提前致谢。

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

其次,您需要告诉MySQL客户端库您正在使用的字符集/编码。 “ SET NAMES” SQL命令执行此任务,并且不同的MySQL客户端(mysql,mysqli等)以不同的方式提供对它的访问,例如http://www.php.net/manual/zh/mysqli.set- charset.php

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

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

还要注意,表排序规则与表字符集不同-排序规则是指如何比较和排序字符串。 令人困惑的东西,希望这会有所帮助!

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM