我对字符集所读的内容完全感到困惑。我正在开发一个接口来存储mysql数据库中以html格式格式化的法语文本。
我了解的是,正确显示所有法语特殊字符的安全方法是将它们存储为utf8。因此,我为数据库和每个表创建了一个utf8的mysql数据库。我可以通过phpmyadmin看到字符完全按照预期的方式存储。但是通过php输出这些字符会产生不稳定的结果:重音字符被无意义的字符替换。这是为什么 ?
我必须对它们进行utf8_encode或utf8_decode吗?注意:html页面字符编码设置为utf8。
更普遍地讲,存储此数据的安全方法是什么?保存时是否应该结合htmlentities,addslashes和utf8_encode,输出时是否应该结合反斜杠,html_entity_decode和utf8_decode?
MySQL快速执行字符集转换为称为连接字符集的连接。您可以使用sql语句指定此字符集
SET NAMES utf8
或使用特定的API函数,例如mysql_set_charset():
mysql_set_charset("utf8", $conn);
如果正确完成此操作,则无需使用utf8_encode()和utf8_decode()之类的函数。
您还必须确保浏览器使用相同的编码。通常使用简单的标头完成此操作:
header('Content-type: text/html;charset=utf-8');
(请注意,字符集在浏览器中称为 utf-8 ,而在MySQL中称为 utf8 。)
在大多数情况下,仅需记住连接字符集和Web字符集,因此,如果仍然不起作用,则可能是您做错了其他事情。尝试尝试一下,通常需要一段时间才能完全理解。