沃梦达 / IT编程 / 前端开发 / 正文

php mysql字符集:存储国际内容的html

我完全被我读到的关于字符集的东西搞糊涂了.我正在开发一个接口来存储在mysql数据库中以html格式化的法语文本.我所理解的是,正确显示所有法国特殊字符的安全方法是将它们存储为utf8.所以我创建了一个mysql数据库,为...

我完全被我读到的关于字符集的东西搞糊涂了.我正在开发一个接口来存储在mysql数据库中以html格式化的法语文本.

我所理解的是,正确显示所有法国特殊字符的安全方法是将它们存储为utf8.所以我创建了一个mysql数据库,为数据库和每个表指定了utf8.
我可以通过phpmyadmin看到字符的存储方式完全符合预期.但是通过php输出这些字符会给我带来不稳定的结果:重音字符被无意义的字符所取代.这是为什么 ?

我必须utf8_encode或utf8_decode他们?注意:html页面字符编码设置为utf8.

更一般地说,存储这些数据的安全方法是什么?我应该在保存时结合htmlentities,addslashes和utf8_encode,并在输出时使用stripslashes,html_entity_decode和utf8_decode吗?

解决方法:

MySQL动态执行字符集转换到称为connection charset的东西.您可以使用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');

(注意,charset在浏览器中称为utf-8,在MySQL中称为utf8.)

在大多数情况下,连接字符集和网络字符集是您需要跟踪的唯一内容,因此如果它仍然不起作用,那么可能还有其他错误.尝试一下,通常需要一段时间才能完全理解.

本文标题为:php mysql字符集:存储国际内容的html